模型关联(三张表关联的问题)
首先介绍一下表结构
goods表(商品表)
id | name | price |
---|---|---|
1 | 商品 | 100 |
2 | 商品1 | 100 |
3 | 商品2 | 100 |
goods_category表(中间表)
id | goods_id | category_id |
---|---|---|
1 | 1 | 1 |
category_id表 (分类表)
id | name | sort |
---|---|---|
1 | 水果 | 1 |
2 | 衣服 | 2 |
业务是做一个商品列表,每个商品要展示它所属的分类,以及根据分类筛选商品。
从表的关系来看,goods为主表关联goods_category表再关联,得到的结果应该是三条数据,其中两条的所属分类为空。
在我使用模型关联的多对多关联后,最终得到的数据和我预期的不太一样。
关联代码
public function categoryRelation()
{
return $this->belongsToMany('App\Models\CategoryModel', 'goods_category', 'goods_id', 'category_id');
}
执行代码
DB::enableQueryLog();
$result = \App\Models\GoodsModel::with('categoryRelation')->whereHas("categoryRelation", function ($query) {
})->get();
dd(DB::getQueryLog());
var_dump($result->toArray());
最终结果
array(2) {
[0]=>
array(3) {
["id"]=>
int(30)
["name"]=>
string(14) "测试商品28"
["category_relation"]=>
array(1) {
[0]=>
array(7) {
["id"]=>
int(3)
["name"]=>
string(6) "衣服"
["sort"]=>2
["pivot"]=>
array(2) {
["goods_id"]=>
int(30)
["category_id"]=>
int(3)
}
}
}
}
[1]=>
array(3) {
["id"]=>
int(137)
["name"]=>
string(6) "水果"
["category_relation"]=>
array(1) {
[0]=>
array(7) {
["id"]=>
int(3)
["name"]=>
string(6) "衣服"
["sort"]=>1
["pivot"]=>
array(2) {
["goods_id"]=>
int(137)
["category_id"]=>
int(3)
}
}
}
}
}
打印的sql
array:2 [
0 => array:3 [
"query" => "select * from `goods` where exists (select * from `category` inner join `goods_category` on `category`.`id` = `goods_category`.`category_id` where `goods`.`id` = `goods_category`.`goods_id`)"
"bindings" => []
"time" => 67.31
]
1 => array:3 [
"query" => "select `category`.*, `goods_category`.`goods_id` as `pivot_goods_id`, `goods_category`.`category_id` as `pivot_category_id` from `category` inner join `goods_category` on `category`.`id` = `goods_category`.`category_id` where `goods_category`.`goods_id` in (?, ?)"
"bindings" => array:2 [
0 => 30
1 => 137
]
"time" => 14.08
]
]
有点不太懂,希望大家能给我一下指导,谢谢大家!
解决了,我沙雕了
这样写就对了!