簡體   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