Laravel 从关系中提取字段
Laravel pluck fields from relations
我有一个卖家对象,它有一个相关的用户。我需要从 LaravelCollective 填写一个 select 所以我需要做这样的事情:
{!! 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;
});
?>
您可以像这样使用 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',
];
希望对您有所帮助!
您可以使用 Laravel 的 pluck
方法:
$sellers = Seller::with('user')->get()->pluck('user.first_name', 'id')
另一种方法是在关系中定义您需要的列。如果在给定关系中始终只需要这些列,那很好。示例:
Class Seller extends Model {
...
public function user()
{
return $this->hasOne(user::class, 'id')
->select('id', 'first_name');
}
}
尝试使用下面的解决方案,它对我有用,因为我正在使用 laravel 8
$sellers = Seller::with('user')->get()->pluck('user.*.first_name')
我有一个卖家对象,它有一个相关的用户。我需要从 LaravelCollective 填写一个 select 所以我需要做这样的事情:
{!! 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;
});
?>
您可以像这样使用 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',
];
希望对您有所帮助!
您可以使用 Laravel 的 pluck
方法:
$sellers = Seller::with('user')->get()->pluck('user.first_name', 'id')
另一种方法是在关系中定义您需要的列。如果在给定关系中始终只需要这些列,那很好。示例:
Class Seller extends Model {
...
public function user()
{
return $this->hasOne(user::class, 'id')
->select('id', 'first_name');
}
}
尝试使用下面的解决方案,它对我有用,因为我正在使用 laravel 8
$sellers = Seller::with('user')->get()->pluck('user.*.first_name')