如何仅在定义数据时传递数据以进行查看?

时间:2018-07-10 18:38:14

标签: php laravel

正如您在下面的代码段中看到的那样,$ similarImages正在传递给视图,但是,可能没有其他类似的图像,这意味着我将传递未定义的变量。这就是为什么只有在$ similarImages存在的情况下,我才需要传递'similarImages' => $similarImages

$tag = Tag::whereHas('images', function($q) use ($id) {
            return $q->where('image_id', $id);
        })->first();

        if (!empty($tag)) {
            $tagId = $tag->id;
        }

        $recentImages = Image::where('user_id', $authorId)->orderBy('created_at', 'desc')->limit(9)->get();

        if (!empty($tagId)) {
            $similarImages = Image::whereHas('tags', function($q) use ($tagId) {
                return $q->where('tag_id', $tagId);
            })->orderBy('created_at', 'desc')->limit(9)->get();
        }

        return view('specificImage', ['image' => $image, 'recentImages' => $recentImages, 'similarImages' => $similarImages, 'author' => $author, 'comments' => $comments]);

2 个答案:

答案 0 :(得分:3)

使用null-coalescing运算符具有默认值:

CREATE TABLE `app_log` (
  `id`              int(11)          NOT NULL AUTO_INCREMENT,
  `timestamp`       datetime         NOT NULL,
  `user_id`         int(11)          NOT NULL,
  `content_type_id` int(11)          NOT NULL,
  `object_id`       int(10) unsigned NOT NULL,
  `status`          int(11)                   DEFAULT NULL,
  `type`            int(11)                   DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `app_log_content_type_id` (`content_type_id`),
  KEY `app_log_144dd2a9` (`timestamp`),
  KEY `app_log_user_id` (`user_id`, `id`)
)
  ENGINE = InnoDB
  AUTO_INCREMENT = 108628300
  DEFAULT CHARSET = latin1

这将使用$ similarImages(如果已定义),并且不为null,否则将分配由[ .. 'similarImages' => $similarImages ?? collect(), .. ] 创建的空集合。

我喜欢始终将其作为收藏的想法,但这就是我。

答案 1 :(得分:0)

$ array总是传递给视图

如果isset $ similarImages,只需将$ similarImages放入$ array

如果没有isset,则$ similarImages会返回$ array(在这种情况下,刀片服务器中将不存在$ similarImages)

在这里您还可以使用array_add($ array,'similarImages',$ similarImages)

$tag = Tag::whereHas('images', function($q) use ($id) {
            return $q->where('image_id', $id);
        })->first();

        if (!empty($tag)) {
            $tagId = $tag->id;
        }

        $recentImages = Image::where('user_id', $authorId)->orderBy('created_at', 'desc')->limit(9)->get();

        if (!empty($tagId)) {
            $similarImages = Image::whereHas('tags', function($q) use ($tagId) {
                return $q->where('tag_id', $tagId);
            })->orderBy('created_at', 'desc')->limit(9)->get();
        }

        $array = [
            'image' => $image,
            'recentImages' => $recentImages,
            'author' => $author,
            'comments' => $comments
            ];

        if (isset($similarImages))
        {
            $array = array_prepend($array, $similarImages, 'similarImages')
        }

        return view('specificImage', $array);