很多时候,模型关联后需要根据关联的模型做查询。
场景:广告表(ad),广告类型表(ad_type) ,现在需要筛选出广告类型表中id 字段为1且广告表中status为1的列表
先看关联的设置部分
public function adType()
{
return $this->belongsTo('AdType', 'type_id');
}
看看TP官方的示例
// 查询用户昵称是think的用户
// 注意第一个参数是关联方法名(不是关联模型名)
$users = User::hasWhere('profile', ['nickname'=>'think'])->select();
// 可以使用闭包查询
$users = User::hasWhere('profile', function($query) {
$query->where('nickname', 'like', 'think%');
})->select();
写出我们的语句
$list = \app\common\model\Ad::hasWhere('adType', ['id' => '1'])->where('Ad.status', 1)->fetchsql(true)->select();
打印结果
"SELECT `Ad`.* FROM `tp_ad` `Ad` INNER JOIN `tp_ad_type` `AdType` ON `Ad`.`type_id`=`AdType`.`id` WHERE `AdType`.`id` = '1' AND `Ad`.`status` = 1"
总结:官方并没有给出hasWhere和where一起使用时的示例,实际应用中可能更复杂,where一般是必不可少的,这里需要注意的是where需要写前缀Ad,这个Ad应该是当前的模型名称,是我猜的哈哈
小弟最近在写一个开源的内容管理系统,SIYUCMS,欢迎一起交流