【问题标题】:Laravel Eloquent query 'with'Laravel Eloquent 查询 'with'
【发布时间】:2016-11-22 03:54:03
【问题描述】:

我有usersimagesimage_user 表。我正在尝试加载并让所有用户获得图像,但 limit 图像只有 4 个。

把它想象成一个画廊。用户可以拥有一张或多张图片

用户模型

public function images()
{

   return $this->belongsToMany(Images::class);
}

这是我目前的查询。

User::with(['images' => function ($query) {
   $query->limit(4);
  }
])->get();

此查询返回用户,但关系为空(图像)

任何帮助将不胜感激。

干杯

【问题讨论】:

    标签: php laravel laravel-5 eloquent


    【解决方案1】:

    没有简单的内置方法可以做到这一点。

    查看 Jarek Tkaczyk 关于此主题的精彩帖子:

    How to get N related models per parent.

    【讨论】:

      【解决方案2】:
      $user = User::with('images')->limit(5)->get();
      

      你知道php artisan tinker吗?您可以通过命令行输出数据。

      试试吧..

      App\User::with('images')->limit(5)->get();
      

      ..如果您的关系设置正确,您会看到 5 个用户有图片。

      已编辑

      抱歉,我没有正确阅读您的问题。

      要限制为每个用户返回的图像,您可以像这样在用户模型上创建一个新方法。

          public function imageslimit(){
      
             return $this->belongsToMany(Images::class)->limit(5);
      
          }
      

      将所有用户从您的控制器传递到您的视图。

      $users = User::all();
      

      然后在遍历视图中的所有用户时调用,就可以了。

      @foreach($user->imageslimit as $image)
      
         $image->name; 
      
      @endforeach
      

      我对此进行了测试,对我来说效果很好。

      【讨论】:

      • 我想你明白我的意思。我正在尝试获取不是用户的图像。您给我的代码是获取用户限制 5 而不是用户的图像并将图像限制为 4。顺便说一句,我知道 php artisan tinker。
      • 已编辑,希望这就是您想要的。它对我来说很好。
      • 此代码总共只会加载 5 张图片。 OP 想要每个用户 5 张图片。
      • 是的,但如果他遍历每个用户,那么每次最多返回 5 张图像。
      【解决方案3】:

      使用take() 仅拍摄 5 张图像。

      $users=User::with('images')->get();
      foreach($users as $user)
      {
         echo $user->name;
         foreach($user->images->take(5) as $image)
         {
            echo $image;
         }
      }
      

      【讨论】:

      • 这只会获取第一个用户。 OP 说他们需要获取所有用户。
      • 您现在正在从数据库中加载所有图像。
      • @JosephSilber 是的。加载所有图像并为每个用户拍摄 5 张图像,如果数据库中的记录不多,则可以作为替代方案。谢谢!
      • 加载所有内容,即使您不需要它们也不是查询数据库的可接受方式。
      猜你喜欢
      • 1970-01-01
      • 2017-10-22
      • 2015-02-22
      • 2017-06-05
      • 1970-01-01
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多