這是我的情況我已經連接了表,但問題是其中一些列與其他表具有相同的名稱。我想知道的是我可以如何防止這種情況發生。具有相同名稱的列是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
我怎麼會用一個 '喜歡' 的查詢到特定的鍵值對?
->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']);
如何將篩選器傳遞給查詢?搜索表單?如果是這樣,它是怎樣的。 – apokryfos
我在這個鏈接中使用了接受的答案,我不認爲這是可能的,但是是的。 http://stackoverflow.com/questions/26682817/laravel-extending-eloquent-where-clauses-depending-on-dynamic-parameters過濾器是對象與鍵值對的數組。 – user827391012
就像'$ filters = [「methods.created_at」=>「somedate」];'會工作。但是你可能會發現自己很難接受這樣的請求,因爲laravel在數組中的點表示意味着子數組,所以你應該首先使用['array_dot($ request-> all())'](https:// laravel.com/docs/5.4/helpers#method-array-dot)。 – apokryfos