繁体   English   中英

如何从 Eloquent 模型中获取所有数据及其关系?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM