laravel dev.
我有三个表比如A B C
A
-----------
-id
-main_location_id // **main location entry = 1**
B
-----------
-id
-a_id
-allocated_qty
C
-----------
-id
-a_id
-location_id // **main location enrty + other locations enrty- 1,2,3**
-total_qty
-aval_qty
关系:
表有许多的B
<表em>也有许多C
查询:
A::with(['B'])
->with(['C']) // here I got all location object from C tables, but I only want main_location_id = location_id data object + its qty
->where('a.id', 1)
->first();
我不明白如何获得location_id, total_qty, aval_qtyfrom tableC表A
具有c。location_id = a.main_location_id
连我自己都不知道我做得对不对?
这可能吗?
请帮我解决这个问题
多谢!
这取决于你如何定义关系。如果在代码中像这样定义一个关系:
// models/A.php
public function c() {
return $this->hasMany(C::class);
}
将默认使用A
的主键,即id
,因此当Laravel为表名添加前缀时,它将变成a_id
。这就变成了一个数组通过A.id = C.a_id
许多属于A
C
年代。你必须传递更多的参数给hasMany
来定义你自己的键。
然而,您需要的关系似乎是hasOne
关系:您的A
只有一个C
到A.main_location_id = C.location_id
。因此,您可以使用手动键定义hasOne
,如:
// models/A.php
public function c() {
return $this->hasOne(C::class, 'location_id', 'main_location_id');
}
如果是错误的键,则必须向hasOne()
关系定义传递额外的参数。
如果您需要这两个关系,只需重命名函数(如果您有合适的表名,请使用复数和单数形式),您可以使用A::query()->with(['c', 'singleC'])