【问题标题】:Laravel pluck fields from relationsLaravel 从关系中提取字段
【发布时间】:2017-03-30 19:54:12
【问题描述】:

我有一个具有相关用户的卖方对象。我需要从 LaravelCollective 填写一个选择,所以我需要做这样的事情:

{!! Form::selectGroup('seller_id', 'Seller', Seller::with('user')->pluck('user.first_name', 'id')->toArray(), null) !!}

问题是我无法从关系中获取字段(user.first_name)。

我该怎么做?

更新

我想避免这样做......

<?php 
    $sellers = [];

    Seller::with('user')->get()->each(function ($seller) use (&$sellers) {
        $sellers[$seller->id] = $seller->user->first_name;
    });
?>

【问题讨论】:

    标签: php laravel laravelcollective laravel-collection


    【解决方案1】:

    您可以像这样使用join() & pluck() 来实现它:

    $s = Seller::join('users', 'sellers.user_id', '=', 'users.id')
              ->pluck('sellers.id', 'users.id')
              ->all();
    

    这将给出一个这样的数组:

    [
        'seller_id_1' => 'user_id_1',
        'seller_id_2' => 'user_id_2',
        'seller_id_3' => 'user_id_3',
        'seller_id_4' => 'user_id_4',
        'seller_id_n' => 'user_id_n',
    ];
    

    希望这会有所帮助!

    【讨论】:

    • 您在调用pluck() 时将参数倒置。要获得您建议的结果,您必须致电:pluck('users.id', 'sellers.id')。第一个 arg 是要采摘的值,第二个 arg 是每个采摘值用作数组键的值。
    【解决方案2】:

    你可以使用 Laravel 的 pluck 方法:

    $sellers = Seller::with('user')->get()->pluck('user.first_name', 'id')
    

    【讨论】:

      【解决方案3】:

      另一种方法是定义关系中需要的列。如果您总是只需要给定关系上的这些列,那就太好了。示例:

      Class Seller extends Model {
          ...
      
          public function user()
          {
              return $this->hasOne(user::class, 'id')
                  ->select('id', 'first_name');
          }
      }
      

      【讨论】:

        【解决方案4】:

        尝试使用以下解决方案,因为我正在使用 laravel 8,它对我有用

        $sellers = Seller::with('user')->get()->pluck('user.*.first_name')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-21
          • 2019-09-26
          • 2022-11-16
          • 1970-01-01
          • 1970-01-01
          • 2015-11-29
          相关资源
          最近更新 更多