讨论数量:
大神,是表中的字段:
GOODS表:[{id字段:1,shopid:10000},{id字段:1,shopid:10001},{id:1,shopid:10000}]
SHOPS表:[{id字段:10000,district字段:'杭州'},{id:10001,district:'杭州'},{id:10002,district:'上海'}]
如何查询:shops表中district字段=‘杭州’的全部goods表数据。
SELECT * FROM goods WHERE shopid IN (SELECT id FROM shops WHERE distrit = '杭州')
来硬的
如果是已经对已经获取到的数据进行过滤整合 如下
$shops = collect([['id' => 10000,'district' => ’杭州’],['id'=>10001,'district' =>’杭州’],['id'=>10002,'district'=>’上海’]]);
$goods = collect([['id' => 1,'shopid'=>10000],['id'=>1,'shopid' =>10001},['id'=>1,'shopid'=>10000]]);
$shopidsArr = $shops->where('district', '=', '杭州')->pluck('id')->values()->toArray();
$goodsData = $goods->whereIn('shop_id', $shopIds);
如果是模型 且建立模型关联关系
// Goods模型中存在关系shop
public function shop() {
return $this->belongsTo(Shop::class, 'shopid', 'id');
}
// 数据获取
$data = Goods::whereHas('shop', function ($query) {
$query->where('district', '=', '杭州')
})->get();
如果是直接查询语句
SELECT * FROM GOODS WHERE shopid IN ( SELECT id FROM SHOPS WHERE district= '杭州');
谢谢各位大佬,按各位大佬的方法,果然行!!!我转化写成了这种方式!!!谢谢大佬们!!!
$goods = DB::table('goods')
->join('shop', 'goods.shop_id', '=', 'shop.id')
->where('shop.district', '=', '杭州市')
->select('goods.*')
->get();
推荐文章: