User variables of a function, in another function

Tags: , , , ,



I have a Laravel app, which the following PHP code:

   public function handle()
    {
                            $post_item->category_id = $source->category_id;
                            $post_item->featured = 0;
                            $post_item->type = Posts::TYPE_SOURCE;
                            $post_item->render_type = $item['render_type'];
                            $post_item->source_id = $source->id;
                            $post_item->description = is_array($item['description'])?'':$item['description'];
                            $post_item->featured_image = $item['featured_image'];
                            $post_item->video_embed_code = $item['video_embed_code'];
                            $post_item->dont_show_author_publisher = $source->dont_show_author_publisher;
                            $post_item->show_post_source = $source->show_post_source;
                            $post_item->show_author_box = $source->dont_show_author_publisher == 1 ? 0 : 1;
                            $post_item->show_author_socials = $source->dont_show_author_publisher == 1 ? 0 : 1;
                            $post_item->rating_box = 0;
                            $post_item->created_at = $item['pubDate'];
                            $post_item->views = 1;
                            $post_item->save();
                            $this->createTags($item['categories'], $post_item->id);

                           // This is where I want to add my echo
   }


   public function createTags($tags, $post_id)
    {

        $post_tags = PostTags::where('post_id', $post_id)->get();

        foreach ($post_tags as $post_tag) {
            Tags::where('id', $post_tag->tag_id)->delete();
        }

        PostTags::where('post_id', $post_id)->delete();

        foreach ($tags as $tag) {

            $old_tag=Tags::where('title',$tag)->first();

            if(isset($old_tag))
            {

                $pt = new PostTags();
                $pt->post_id = $post_id;
                $pt->tag_id = $old_tag->id;
                $pt->save();

            }

            else {
                $new_tag = new Tags();
                $new_tag->title = $tag;
                $new_tag->slug = Str::slug($tag);
                $new_tag->save();

                $pt = new PostTags();
                $pt->post_id = $post_id;
                $pt->tag_id = $new_tag->id;
                $pt->save();
            }
        }


   }

Im trying to echo the the title along with the tags, right after the commented place, but it fails to provide the correct output. I was wondering if Im using the correct way or my workaround is completely wrong.

Im using this code in the commented part:

$tweet = $post_item->title . ' tags: ' . $post_item->tags;

After doing some tests, I realized that if I use

var_dump($tag);

right after

foreach ($tags as $tag)

at my createTags function, it seems that all tags are output correctly.

Im wondering if I can store all $tags inside the createTag function’s foreach, under a globally accessed variable that would be used in the initial handle function echoed.

Answer

Guessing the post item model has a relation “tags” you could try this:

$tweet = $post_item->title . ' tags: ' . implode(', ', $post_item->tags->toArray());

Also if you would just like to echo the tags on the commented place, try this:

echo implode(',', $item['categories']);


Source: stackoverflow