2014-11-17 180 views
1

我有三個模型客戶,任務,工作人員。現在任務是對客戶實現的,而且員工與客戶有關。但是人員和任務之間沒有關係。我如何從一個ORM獲取所有三條記錄。Laravel 3個模型之間的關係

關係

/*staff*/ /**have pivot table 'staff_customer' **/ 
public function customers(){ 
    return $this->belongsToMany('Customer'); 
} 


/*customer*/ 
public function staffs(){ 
    return $this->belongsToMany('Staff'); 
} 
public function tasks(){ 
    return $this->hasMany('Task'); 
} 


/*task*/ /** has cutomer_id in table*/ 
public function customer(){ 
    return $this->belongsTo('Customer'); 
} 

我有日期已被過濾的任務。我需要它的客戶和與這些客戶相關的員工。

$tasks = Task::Where(...)->with('customer')->with('staffs')->get(); 
+1

能您可以提供更多關於表格如何相對的信息彼此相愛? – Jerodev

+0

@Jerodev我編了問題 –

回答

1

您要基於您的查詢Customer,因爲這是包含兩種關係的模型。我相信,像這樣的工作:

Customer::with('staffs', 'tasks')->where('tasks.field', $value)->get(); 

編輯

我相信這應該是可能的:

Task::where(...)->with('customer', 'customer.staffs')->get(); 
+0

如何在whereRaw('?between tasks.rem_date和tasks.due_date',[$ today])''這個工作中使用變量 –

+0

@DevAbel你試過了嗎?我不明白你爲什麼要用'whereRaw',只用'where'? –

+0

@DevAbel你不能那樣做,有單獨的數據庫查詢,所以你不能在那裏引用另一個表,除非你使用連接。 –

1

閱讀文檔here

$tasks = Task::where(...)->with('customer.staffs')->get(); 

// then for a given task get collection of staffs by customer: 
$tasks->first()->customer->staffs;