簡體   English   中英

Laravel-僅選擇聯接表中的指定列

[英]Laravel - Select only specified columns in joined tables

這是我已加入表的情況,但問題是其中某些列與其他表具有相同的名稱。 我想知道的是如何防止這種情況發生。 具有相同名稱的列是created_at但我只想使用方法的表created_at( methods.created_at )。 這是我的代碼,以更好地說明我的情況

 $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對象數組->where ,我將其用作子句的搜索映射。 但是我的問題就像我上面說的那樣,表在某些列(例如created_at)上具有相同的名稱,其他列則沒有關系,因為我沒有使用它。

問題是,當我通過searchmap搜索時,如何明確告訴查詢我正在使用methods.created_at (在本例中$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問題一樣,我無法將其命名為filter_list.methods.created_at ,對此非常有幫助。

編輯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']);

在這種情況下,請在where子句中傳遞完全限定的列名,例如:

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

或創建表別名並使用如下別名:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM