[英]How to get all data from a Eloquent Model with it's relations?
我的問題是如何從具有其關系的雄辯模型中獲取數據?
想象一下 3 個表:
用戶:
| id | name | email |
|----|------|-----------------|
| 1 | name | email@email.com |
公司:
| id | name | user_id | address_id |
|----|------|---------|------------|
| 1 | name | 1 | 1 |
地址:
| id | zip | state |
|----|--------|-------|
| 1 | 101010 | LA |
和關系:
公司.php
public function user()
{
return $this->hasOne(User::class);
}
public function address()
{
return $this->hasOne(Address::class);
}
用戶名
public function company()
{
return $this->belongsTo(Company::class);
}
地址.php
public function company()
{
return $this->belongsTo(Company::class);
}
在這種情況下,我如何才能讓我們說所有公司及其相關用戶和地址?
on Company::whereHas('users')->get();
得到:
Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.company_id' in 'where clause' (SQL: select * from `users` where `users`.`company_id` in (1, 2, 3, 4, 5))'
有什么想法嗎?
謝謝
您需要將 hasOne 與 BelongsTo 交換,反之亦然;
公司.php
public function users()
{
return $this->belongsTo(User::class, 'user_id');
}
public function address()
{
return $this->belongsTo(Address::class);
}
用戶名
public function company()
{
return $this->hasOne(Company::class);
}
地址
public function company()
{
return $this->hasOne(Company::class);
}
然后在控制器中
Company::whereHas('users')
->whereHas('address')
->with('users')->with('address')
->get();
問題是在公司模型中,用戶和地址方法使用hasOne()
方法引用其他模型。 它正在尋找用戶表中的輔助鍵,而不是公司表中的輔助鍵。
簡單地將hasOne()
與belongsTo
交換belongsTo
解決我的問題。
所以現在我的Company.php模型看起來像:
public function user()
{
return $this->belongsTo(User::class);
}
public function address()
{
return $this->belongsTo(Address::class);
}
用戶名
public function company()
{
return $this->hasOne(Company::class);
}
地址.php
public function company()
{
return $this->hasOne(Company::class);
}
現在我們可以通過Company::with('user')->with('address')->get();
獲取所有公司及其用戶和地址的列表Company::with('user')->with('address')->get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.