2017-04-18 32 views
0

這是我的情況我已經連接了表,但問題是其中一些列與其他表具有相同的名稱。我想知道的是我可以如何防止這種情況發生。具有相同名稱的列是created_at,但我只想使用方法的表created_at(methods.created_at)。這裏是我的代碼來解釋我的情況更好Laravel - 在連接表中只選擇指定的列

$filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by') 
     ->leftJoin('roles', 'roles.id', '=', 'users.role_id') 
     ->leftJoin('types', 'types.id', '=', 'methods.type_id') 
     ->where($request->filters)//will act as a searchmap 
     ->get([ 'users.username', 'users.id AS users_id', 'methods.*', 'methods.id AS method_id', 'methods.name AS method_name', 'roles.id AS role_id', 'roles.name AS role_name', 
     'types.id AS type_id_typetable', 'types.name AS type_name']); 

通知如何->where是對象的數組,我使用它作爲子句的searchmap。但我的問題就像我上面所說的那樣,這些表在某些列上具有相同的名稱,例如created_at,其他列並不重要,因爲我沒有使用它。

的問題是如何做我明確告訴大家,我現在用的是methods.created_at當我通過searchmap搜索它(在這種情況下,$request->filters['created_at']查詢。請讓我知道如果你需要任何更多的細節。

編輯

if($("#date_select_off").val() == "daily") { 
     let day = $("#day_date").val(); 
     filter_list.created_at = day; 
     } 

在此代碼jQuery中,我命名的鍵一樣的列,這樣我可以在PHP查詢中使用它作爲參數。但是我喜歡我的最初的問題,我根本就不要把它命名爲filter_list.methods.created_at任何幫助,這是非常感謝。

EDIT 2

enter image description here

我怎麼會用一個 '喜歡' 的查詢到特定的鍵值對?

->where($request->filters)//will act as a searchmap 
     ->orWhere('methods.created_at', 'LIKE', $request->filters['methods.created_at']) 

我試過這樣做,但這只是錯誤的,因爲鍵值對已經在第一個where子句中打了。

編輯3 它可以使用一些改進,但是,是

$filtered_table = Method::leftJoin('users', 'users.id', '=', 'methods.created_by') 
     ->leftJoin('roles', 'roles.id', '=', 'users.role_id') 
     ->leftJoin('types', 'types.id', '=', 'methods.type_id') 
     ->where($request->filters)//will act as a searchmap 
     ->orWhere('methods.created_at', 'LIKE', '%' . $request->filters['methods.created_at'] . '%') 
     ->get([ 'users.username', 'users.id AS users_id', 'methods.id AS method_id', 'methods.name AS method_name', 'methods.created_at AS method_created_at', 'roles.id AS role_id', 'roles.name AS role_name', 
     'types.id AS type_id_typetable', 'types.name AS type_name']); 
+0

如何將篩選器傳遞給查詢?搜索表單?如果是這樣,它是怎樣的。 – apokryfos

+0

我在這個鏈接中使用了接受的答案,我不認爲這是可能的,但是是的。 http://stackoverflow.com/questions/26682817/laravel-extending-eloquent-where-clauses-depending-on-dynamic-parameters過濾器是對象與鍵值對的數組。 – user827391012

+0

就像'$ filters = [「methods.created_at」=>「somedate」];'會工作。但是你可能會發現自己很難接受這樣的請求,因爲laravel在數組中的點表示意味着子數組,所以你應該首先使用['array_dot($ request-> all())'](https:// laravel.com/docs/5.4/helpers#method-array-dot)。 – apokryfos

回答

0

根據您的要求更改您的模型類,以指定要選擇的列:

public function someModel() { 
    return $this->belongs_to('otherModel')->select(array('id', 'name')); 
} 
+0

我應該在哪裏放置這個控制器到我正在查詢的地方或我加入的模型。 – user827391012

+0

在模型類中,創建檢索數據的方法。 –

0

在這種情況下,通過在where子句一樣完全合格的列名:

->where('methods.created_at', '=', $request->filters) 

,或者創建一個表的別名和使用別名:

SELECT col from methods as t1, 
... 
WHERE t1.col = 'some value';