laraval中ORM链式查询方式

148 阅读1分钟

一、 利用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'