whereHas, with,has的區別

  1. has語句執行的sql
SELECT
	*
FROM
	`gs_store_corner_marks`
WHERE
	EXISTS (
		SELECT
			*
		FROM
			`gs_store_goods`
		INNER JOIN `gs_store_goods_corner_marks` ON `gs_store_goods`.`id` = `gs_store_goods_corner_marks`.`goods_id`
		WHERE
			`gs_store_corner_marks`.`id` = `gs_store_goods_corner_marks`.`corner_mark_id`
		AND `gs_store_goods`.`deleted_at` IS NULL
	)
AND `store_id` = 1000106
ORDER BY
	`gs_store_corner_marks`.`id` DESC
  1. whereHas語句執行的sql
SELECT
	*
FROM
	`gs_store_corner_marks`
WHERE
	EXISTS (
		SELECT
			*
		FROM
			`gs_store_goods`
		INNER JOIN `gs_store_goods_corner_marks` ON `gs_store_goods`.`id` = `gs_store_goods_corner_marks`.`goods_id`
		WHERE
			`gs_store_corner_marks`.`id` = `gs_store_goods_corner_marks`.`corner_mark_id`
		AND `validity_type` = 2
		AND `gs_store_goods`.`deleted_at` IS NULL
	)
AND `store_id` = 1000106
ORDER BY
	`gs_store_corner_marks`.`id` DESC
  1. with執行的sql
SELECT
	*
FROM
	`gs_store_corner_marks`
WHERE
	`store_id` = 1000106
ORDER BY
	`gs_store_corner_marks`.`id` DESC

SELECT
	`gs_store_goods`.*, `gs_store_goods_corner_marks`.`corner_mark_id` AS `pivot_corner_mark_id`,
	`gs_store_goods_corner_marks`.`goods_id` AS `pivot_goods_id`
FROM
	`gs_store_goods`
INNER JOIN `gs_store_goods_corner_marks` ON `gs_store_goods`.`id` = `gs_store_goods_corner_marks`.`goods_id`
WHERE
	`gs_store_goods_corner_marks`.`corner_mark_id` IN (34, 39, 40, 41, 42, 48, 49, 50, 54)
AND `gs_store_goods`.`deleted_at` IS NULL

他們的示例:

$goods_lists = $this->cornerMark
            ->where(['validity_type'=>2])
            ->where('id', '<>', $param['id'])
            ->with('goods')
            ->whereHas('goods', function ($query) {
                return $query->where('store_goods.store_id', $this->storeId);
            })
            ->get()->toArray();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章