Laravel从关系中汲取领域

时间:2016-11-16 14:51:15

标签: php laravel laravelcollective laravel-collection

我有一个卖方对象,其中有一个相关的用户。我需要填写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;
    });
?>

4 个答案:

答案 0 :(得分:35)

您可以使用Laravel的pluck方法:

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

答案 1 :(得分:6)

您可以使用join()&amp; pluck()喜欢这样:

latin1

这会产生如下数组:

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

希望这有帮助!

答案 2 :(得分:1)

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

Class Seller extends Model {
    ...

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

答案 3 :(得分:0)

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

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