簡體   English   中英

Laravel LeftJoin where

[英]Laravel LeftJoin where

我的雄辯模型有一些問題,我嘗試將兩個不同的表合二為一

現在我有兩張桌子。

第一個表名稱“company_saved_cv”

|id|company_id|worker_id |
--------------------------
|1|       2    |  61     |
|3|       3    |  66     |
|4|       2    |  69     |
--------------------------

第二個表名稱“工人”

|id|location|name_and_surname|
------------------------------
|61|London  | John John      |
|62|London  | John John      |
|66|London  | John John      |
|67|London  | John John      |
|68|London  | John john      |

我想得到這樣的桌子。

|id|location|name_and_surname|worker_id|
---------------------------------------|
|61|London  | John John      |  61     |
|62|London  | John John      | NULL    |
|66|London  | John John      | 66      |
|67|London  | John John      | NULL    |
|68|London  | John john      | NULL    |

我的模型函數在哪里

public static  function CvSearch($interested_field, $location)
{

    $match = "MATCH( `interested_fields`) AGAINST (?)";

    $query = Worker::select('workers.name_and_surname', 'workers.id', 'workers.location','company_saved_cv.worker_id')
        ->leftJoin('company_saved_cv', function($leftJoin)
        {
            $leftJoin->on('company_saved_cv.worker_id', '=', 'workers.id')
                ->where('company_saved_cv.company_id', '=', Session::get('company_id') );


        })
        ->where('workers.location', '=', $location)
        ->whereRaw($match, array($interested_field))
        ->orderBy('workers.created_at')
        ->paginate(10);
    return $query;
}

如果我評論這一行: ->where('company_saved_cv.company_id', '=', Session::get('company_id') ); 它正在工作,但我只需要從工人表中獲取 company_id = 2 的行(在我的示例中);

Session::get('company_id') = 2 

我將通過在 laravel.log 文件中記錄它來檢查它。

我認為 where('company_saved_cv.company_id', '=', Session::get('company_id') ); 有問題請求,但我無法弄清楚,也許有人可以幫助我?

我用這段代碼解決了這個問題

 $query = Worker::select('workers.name_and_surname', 'workers.id', 'workers.location','company_saved_cv.worker_id')
        ->leftJoin('company_saved_cv', function($leftJoin)use($company_id)
        {
            $leftJoin->on('workers.id', '=', 'company_saved_cv.worker_id');
            $leftJoin->on(DB::raw('company_saved_cv.company_id'), DB::raw('='),DB::raw("'".$company_id."'"));


        })

好吧,當您將 LEFT JOIN 用作 INNER JOIN 時

使用 LEFT JOIN 和 WHERE 之類的

SELECT workers.name_and_surname, workers.id, workers.location,company_saved_cv.worker_id
FROM workers LEFT JOIN company_saved_cv
ON company_saved_cv.worker_id= workers.id
WHERE company_saved_cv.company_id = 2

輸出

|id|location|name_and_surname|worker_id|
---------------------------------------|
|61|London  | John John      |  61     |
|66|London  | John John      |  66     |

使用 LEFT JOIN 和 AND 之類的

SELECT workers.name_and_surname, workers.id, workers.location,company_saved_cv.worker_id
FROM workers LEFT JOIN company_saved_cv
ON company_saved_cv.worker_id= workers.id
AND company_saved_cv.company_id = 2

輸出

|id|location|name_and_surname|worker_id|
---------------------------------------|
|61|London  | John John      |  61     |
|62|London  | John John      | NULL    |
|66|London  | John John      | 66      |
|67|London  | John John      | NULL    |
|68|London  | John john      | NULL    |

新查詢

$query = Worker::select('workers.name_and_surname', 'workers.id', 'workers.location','company_saved_cv.worker_id')
        ->leftJoin('company_saved_cv', function($leftJoin)
        {
            $leftJoin->on('company_saved_cv.worker_id', '=', 'workers.id')

                ->on('company_saved_cv.company_id', '=', Session::get('company_id') );


        })

或多或少是這樣的:

$directoryTypeId = 1;

Node::query()
    ->leftJoin('directories', 'directories.id', '=', 'nodes.directory_id')
    ->leftJoin('directory_types', function ($leftJoin) use ($directoryTypeId) {
        $leftJoin
            ->on('directory_types.id', '=', DB::raw($directoryTypeId))
            ->on('directory_types.COLUMN_1', '=', 'directories.COLUMN_2');
    })
    ->select([
        'nodes.id as node_id',
        'directories.name',
        'directory_types.id as type_id',
    ]);

您可以輕松地使用模型。 最后一個表,您可以刪除位置,因為您可以從模型中獲取它。 輕松創建多對多關系或您想要的東西。 檢查文檔: http : //laravel.com/docs/4.2/eloquent#relationships

暫無
暫無

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

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