[英]Laravel Relationships with multiple eloquent
看起來我在關系部分需要一些幫助。例如,一個用戶的多個地址記錄保存在數據庫中。
看不到地址部分,我覺得eloquent有問題,但我不確定。
按照我的代碼:
user
表
id | name | lastname |
--- -------------- ----------
1 | Rahuel | lastnameRahuel
2 | Dalton Miller | lastnameDalton
adress
表
user_id | adress
-------- ---------
1 | 740 Brown Greens Suite
1 | 9906 Cleora Wall Apt.
2 | 53977 Kip Center Apt
UserModel
public function getAdress()
{
return $this->hasMany(Adress::class);
}
AdressModel
public function getUser()
{
return $this->belongsTo(User::class);
}
UserController
$users = User::with('getAdress')->get();
foreach ($users as $user){
echo $user->name;
echo $user->lastname;
echo $user->adress;
}
user_migration
public function up()
{
Schema::create('user', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('lastname');
});
}
adres_migration
Schema::create('adress', function (Blueprint $table) {
$table->bigInteger('user_id')->unsigned();
$table->string('adress');
$table->foreign('user_id')->references('id')->on('user')->onDelete('cascade');
});
1 用戶有多個地址,所以hasMany
使用,它會返回一個地址列表。 所以你不能以$user->adress;
$users->getAdress
pluck
和join
顯示逗號分隔的地址,如下所示。 $users = User::with('getAdress')->get();
foreach ($users as $user){
echo $user->name;
echo $user->lastname;
echo $user->getAdress ? $user->getAdress->pluck('adress')->join(',') : '';
}
嘗試這樣的事情:
$users = User::with('getLatestAdress')->get();
foreach ($users as $user){
echo $user->name;
echo $user->lastname;
echo $user->getLatestAddress->adress;
}
因為您需要先調用關系名稱,然后再調用屬性。
更新:
由於關系getAddress
返回一個數組,因此您可以設置一個新關系以指向要顯示的最新關系。
public function getLatestAdress()
{
return $this->hasOne(Adress::class)->latest();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.