一、 利用ORM中的局部作用域实现表连接操作
1 model中的代码
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class UserInfo extends Model
{
protected $table='user_info';
//局部作用域(定义方法时需要带scope,使用时不需要)
public function scopeFilter($query){
return $query->where('a.name','jack')->where('a.age',12);
}
// 带where条件
public function scopeJoinPhone($query,$type='left'){
return $query->join('phone as p',function($join){
$join->on('p.phone','=','a.phone')->where('p.phone',12345);
},null,null,$type);
}
// 不带where条件
public function scopeJoinClass($query){
return $query->join('class as c','c.id','=','a.class_id');
}
}
2 controller 调用方式
$userInfo = new UserInfo();
$res = $userInfo->filter()->joinPhone()->joinClass()->from('user_info','a')->get();
3 打印的sql
select * from `user_info` as `a`
left join `phone` as `p` on `p`.`phone` = `a`.`phone` and `p`.`phone` = '12345'
inner join `class` as `c` on `c`.`id` = `a`.`class_id`
where `a`.`name` = 'jack' and `a`.`age` = '12'