2017-04-18 1 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のようにいくつかのカラムに同じ名前が付けられているようなものです。他のカラムは使用しないので問題ありません。

質問は、私は明示的に私は、この場合、(searchmapを通じて$request->filters['created_at']それを探していたとき、私はmethods.created_atを使用していたクエリを教えてください方法です。は、あなたが任意の詳細が必要な場合は私に知らせてください。

このコードで

EDIT

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

jqueryの中で私はPHPのクエリにパラメータとして使用できるように列と同じキーに名前を付ける。しかし、私の、私は単純にすることができます私の最初の問題のようにしています名前はですこれに関する助けがあれば大歓迎です。

EDIT 2

enter image description here

どのように私は、その特定のキーと値のペアに 'LIKE' クエリを使用しますか?

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

私はこれをやってみましたが、最初のwhere句にキー値のペアが既に当てられているので間違っています。これは、いくつかの改善を使用することができますが、ええ、この場合

$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句のように、完全修飾列名を渡す

EDIT 3

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

または表の別名を作成し、次のような別名を使用してください:

SELECT col from methods as t1, 
... 
WHERE t1.col = 'some value'; 
関連する問題