関連するユーザーを持つセラーオブジェクトがあります。 LaravelCollectiveからselectを入力する必要があるため、次のようなものを作成する必要があります。
{!! Form::selectGroup('seller_id', 'Seller', Seller::with('user')->pluck('user.first_name', 'id')->toArray(), null) !!}
問題は、リレーションシップ(user.first_name)からフィールドを取得できないことです。
どうすればいいですか?
[〜#〜] update [〜#〜]
これを避けたい...
<?php
$sellers = [];
Seller::with('user')->get()->each(function ($seller) use (&$sellers) {
$sellers[$seller->id] = $seller->user->first_name;
});
?>
Laravelの pluck
メソッドを次のように使用できます。
$sellers = Seller::with('user')->get()->pluck('user.first_name', 'id')
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',
];
お役に立てれば!
別の方法は、リレーションシップ内で必要な列を定義することです。特定のリレーションシップでこれらの列のみが常に必要な場合は便利です。例:
Class Seller extends Model {
...
public function user()
{
return $this->hasOne(user::class, 'id')
->select('id', 'first_name');
}
}