Laravel5.5 ネストしたリレーション先から取得する

情報 PHP Laravel MySQL MariaDB クエリビルダ Eloquent DB リレーション モデル

目的としては、カテゴリーテーブルにアクセスしてリレーションしている子テーブルの紐づいた情報も取得したい。
条件としては、子テーブルがパラメーターを持っていてそれにあわせたデータだけを抽出したい。その持ってるパラメーターの定義は別のテーブルでされている。
クエリ的には、要するにリレーション先のリレーション先(ネストしたリレーション)にクエリかけたい。

・paramsテーブル
・system_categoriesテーブル
・systemsテーブル
paramsテーブルでsystemsテーブルから取得したい紐づきを定義している。systemsの親
system_categoriesはsystemsの種類,systemsの親。
systemsはparam_idとsystem_categories_idを持つ。両方ともの子テーブル。

paramsテーブルのモデル。

    public function getList($param_id)
    {
        return  $this->object
            ->with('systemCategory','systemCategory.system')
            ->whereHas('systemCategory.system', function($q) {
                $q->where('param_id', "=", $param_id);
            })
            ->get();
    }

モデルであらかじめリレーションを組んである状態
モデルにsystemCategoryとsystemというリレーションを用意した。

whereHasでネストしたリレーション先があるとき
クロージャーでリレーション先に対しての条件をかける。

とか書いたけどここまで全部間違いでした。
パラメーターテーブルとカテゴリーが紐づきがないからリレーションできまへん。

ネストしたリレーション先から取得するまではいいとしても
リレーション先の結果までを変える方法がわからぬ

Laravelおにいさん / 2018-05-25 / 636 / 0
このエントリーをはてなブックマークに追加
関連記事

まだコメントがついていません。

ログイン不要でコメントの投稿ができます。