Laravel Eloquent Eager Loading : Join same table twice

前端 未结 1 1136
醉梦人生
醉梦人生 2021-02-08 04:51

I have a users table and an appointments table. In appointment table I have two user ID\'s (customer_id, staff_id). I want to retrieve all the

1条回答
  •  醉酒成梦
    2021-02-08 05:35

    class T1 extends Eloquent {
    
        protected $table = 't1';
    
    
    }
    
    class T2 extends Eloquent {
    
        protected $table = 't2';
    
        public function customer()
        {
            return $this->belongsTo('T1','c_id');//c_id - customer id
        }
        public function staff()
        {
            return $this->belongsTo('T1','s_id');//s_id - staff id
        }
    }
    

    1) With use "with":

        $list = \T2::with('customer')->with('staff')->get();
        foreach ($list as $row) {
            echo 'ID: '.$row->id.', customer: '.$row->customer->name.', staff: '.$row->staff->name.'
    '; }

    2) With joins:

    $list = \T2::leftJoin('t1 as customer_table', 'customer_table.id','=','t2.c_id')
            ->leftJoin('t1 as staff_table', 'staff_table.id','=','t2.s_id')
            ->select('staff_table.name as staff_name','customer_table.name as customer_name')
            ->get();
    foreach ($list as $row) {
        echo 'customer: '.$row->customer_name.', staff: '.$row->staff_name.'
    '; }

    About second question - This is for subqueries. Look documentation: http://laravel.com/docs/eloquent#eager-loading

    0 讨论(0)
提交回复
热议问题