42

我有一个卖家对象,它有一个相关的用户。我需要从 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

4 回答 4

81

你可以使用 Laravel 的pluck方法:

$sellers = Seller::with('user')->get()->pluck('user.first_name', 'id')
于 2016-11-16T15:49:33.380 回答
12

您可以通过使用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',
];

希望这可以帮助!

于 2016-11-16T15:34:09.653 回答
8

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

$sellers = Seller::with('user')->get()->pluck('user.*.first_name')
于 2021-06-09T09:02:39.167 回答
2

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

Class Seller extends Model {
    ...

    public function user()
    {
        return $this->hasOne(user::class, 'id')
            ->select('id', 'first_name');
    }
}
于 2018-05-14T15:13:25.780 回答