我的问题是如何从雄辩的模型及其关系中获取数据?
想象一下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 |
与关系:
Company.php
public function user()
{
return $this->hasOne(User::class);
}
public function address()
{
return $this->hasOne(Address::class);
}
User.php
public function company()
{
return $this->belongsTo(Company::class);
}
Address.php
public function company()
{
return $this->belongsTo(Company::class);
}
在这种情况下,我如何获得所有拥有相关用户和地址的公司?
在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))'
有什么想法吗?
谢谢
答案 0 :(得分:0)
您需要将hasOne与BelongsTo交换,反之亦然;
Company.php
public function users()
{
return $this->belongsTo(User::class, 'user_id');
}
public function address()
{
return $this->belongsTo(Address::class);
}
User.php
public function company()
{
return $this->hasOne(Company::class);
}
地址
public function company()
{
return $this->hasOne(Company::class);
}
,然后在 Controller
中Company::whereHas('users')
->whereHas('address')
->with('users')->with('address')
->get();
答案 1 :(得分:0)
问题在于,在 company 模型中,用户和地址方法使用hasOne()
方法引用其他模型。它正在寻找要在用户表中而不是公司中使用的辅助密钥。
只需将hasOne()
换成belongsTo
就可以解决我的问题。
所以现在我的 Company.php 模型如下:
public function user()
{
return $this->belongsTo(User::class);
}
public function address()
{
return $this->belongsTo(Address::class);
}
User.php
public function company()
{
return $this->hasOne(Company::class);
}
Address.php
public function company()
{
return $this->hasOne(Company::class);
}
现在我们可以通过Company::with('user')->with('address')->get();