Laravel Eloquent - 如何加入 table
Laravel Eloquent - how to join a table
我正在为我的应用开发 API。
我正在尝试从数据库中提取项目并 return 它们在 JSON 对象中,
我的物品 table 看起来像这样:
Items
-id
-name
-description
-price
-currency_id
-company_id
这是我获取物品的方式:
$rows = Company::where('guid',$guid)
->first()
->items()
->orderBy('name', $sort_order);
我想用包含货币 table
的所有列的货币对象替换 currency_id
所以我的结果会是这样的:
[
{
'id':'1',
'name':'name',
'description': 'example',
'price':'100',
'currency':{
'id':'1',
'name':'usd',
'symbol': '$'
}
}
]
更新:
这是我的货币 table:
id
name
symbol
code
试试下面
在项目模型中建立一个关系
public function currencies() {
return $this->hasMany('App\Currency');
}
然后在您的控制器中执行以下操作
$row=Items::All()->with('currencies');
编辑 2:用户的问题比这更复杂,因为分页和搜索与查询集成。帮助https://pastebin.com/ppRH3eyx
编辑:我已经测试了代码。所以在这里。
在公司模型中
public function items()
{
return $this->hasMany(Item::class);
}
在项目模型中
public function currency()
{
return $this->belongsTo(Currency::class);
}
控制器逻辑
$items = Company::with(['items' => function($query) use ($sort_order) {
$query->with('currency')->orderBy('name', $sort_order);
}])
->where('guid', $guid)
->first()
->items;
带有测试数据的结果
[
{
"id": 2,
"name": "Toy",
"description": "Random text 2",
"price": 150,
"company_id": 1,
"currency_id": 1,
"currency": {
"id": 1,
"name": "usd",
"symbol": "$",
"code": "USD"
}
},
{
"id": 1,
"name": "Phone",
"description": "Random text",
"price": 100,
"company_id": 1,
"currency_id": 1,
"currency": {
"id": 1,
"name": "usd",
"symbol": "$",
"code": "USD"
}
}
]
试试这个。
$rows = Company::with('items.currency')
->where('guid', $guid)
->first()
->items()
->orderBy('name', $sort_order);
我正在为我的应用开发 API。
我正在尝试从数据库中提取项目并 return 它们在 JSON 对象中, 我的物品 table 看起来像这样:
Items
-id
-name
-description
-price
-currency_id
-company_id
这是我获取物品的方式:
$rows = Company::where('guid',$guid)
->first()
->items()
->orderBy('name', $sort_order);
我想用包含货币 table
的所有列的货币对象替换 currency_id所以我的结果会是这样的:
[
{
'id':'1',
'name':'name',
'description': 'example',
'price':'100',
'currency':{
'id':'1',
'name':'usd',
'symbol': '$'
}
}
]
更新: 这是我的货币 table:
id
name
symbol
code
试试下面
在项目模型中建立一个关系
public function currencies() {
return $this->hasMany('App\Currency');
}
然后在您的控制器中执行以下操作
$row=Items::All()->with('currencies');
编辑 2:用户的问题比这更复杂,因为分页和搜索与查询集成。帮助https://pastebin.com/ppRH3eyx
编辑:我已经测试了代码。所以在这里。
在公司模型中
public function items()
{
return $this->hasMany(Item::class);
}
在项目模型中
public function currency()
{
return $this->belongsTo(Currency::class);
}
控制器逻辑
$items = Company::with(['items' => function($query) use ($sort_order) {
$query->with('currency')->orderBy('name', $sort_order);
}])
->where('guid', $guid)
->first()
->items;
带有测试数据的结果
[
{
"id": 2,
"name": "Toy",
"description": "Random text 2",
"price": 150,
"company_id": 1,
"currency_id": 1,
"currency": {
"id": 1,
"name": "usd",
"symbol": "$",
"code": "USD"
}
},
{
"id": 1,
"name": "Phone",
"description": "Random text",
"price": 100,
"company_id": 1,
"currency_id": 1,
"currency": {
"id": 1,
"name": "usd",
"symbol": "$",
"code": "USD"
}
}
]
试试这个。
$rows = Company::with('items.currency')
->where('guid', $guid)
->first()
->items()
->orderBy('name', $sort_order);