/ / Convertendo consultas cruas em laravel - php, laravel, laravel-5.3

Conversão de consultas brutas em laravel - php, laravel, laravel-5.3

Eu tenho esse esquema

product_categories

id | product_category
---------------------
1  | ABC
2  | DBC
3  | EBA

store_product_categories

id | category_id | store_id
------------------------
1  | 2        | 11
2  | 1        | 11
3  | 3        | 11

Eu criei uma consulta no banco de trabalho mysql

SELECT pc.* FROM product_categories pc LEFT JOIN store_product_categories spc ON pc.category = pc.id AND spc.store_id = 11 WHERE spc.category IS NULL;

Essa consulta realmente obtém todas essas categorias de product_categories mesa que não estão presentes em store_product_categories.

Agora estou realmente muito confuso como construir este é o Laravel Eloq ..

Eu tentei isso.

$exclusive_categories = Product_category::join("store_product_categories","store_product_categories.category_id","=","product_categories.id")
->where("store_product_categories.store_id","=",session("store_id"))
->where("store_product_categories.category_id","=","NULL")->get();

Mas isso não me dá resultado

Respostas:

0 para resposta № 1
$exclusive_categories = Product_category::leftJoin("store_product_categories spc", function ($join) {
$join->on("spc.category_id", "=", "product_categories.id");
$join->on("spc.store_id", "=", DB::raw(session("store_id")));
})
->whereNull("spc.category_id")
->get(["product_categories.*"]);

1 para resposta № 2

Como você está se unindo em duas colunas diferentes, é necessário passar isso por meio de uma função / encerramento:

$exclusive_categories = Product_category::leftJoin("store_product_categories", function($join) {
$join->on("store_product_categories.category_id","=","product_categories.id")
->on("store_product_categories.store_id","=",session("store_id"));
})
->where("store_product_categories.store_id","=","NULL")->get();

Eu não tenho certeza se isso é exatamente o que você quer. Se você está procurando onde store_id é NULL ou store_id = o ID da sessão, você pode passar isso através de outro encerramento / função.


0 para resposta № 3
$exclusive_categories = Product_category::leftJoin("store_product_categories","store_product_categories.category_id","=","product_categories.id")
->where("store_product_categories.store_id","=",session("store_id"))
->whereNull("store_product_categories.store_id")->get();

https://laravel.com/docs/5.3/queries