laravel/eloquentのwithでカラム指定しつつリレーション先の子テーブルも取得

っていう言い方(タイトル)でいいのかわからんのだけども、

eloquentのwithでhasmanyの中間テーブル介して
postをlikeしているuserとuserの子テーブルであるprofileも参照しつつ
userのemailとかの情報は除外したいって時です。

よくある例だとは思うので
絶対方法あるはずだけども
どう書けば良いのか(調べたらいいか)分からず
結構苦戦したのでメモしておきます。

単純にカラム指定

マニュアルにもあるので調べればすぐでますが

$query = Post::query();
$query->with([
    'likes.user:id,name'
]);

こんな感じでいける。

でも子テーブルの情報も参照したいのです。
色々試して下記でいけました。

カラム指定しつつ(除外)子テーブルも

$query = Post::query();
$query->with([
    'likes.user' => function ($query) {
        $query->select(['id', "name"])->with("profile");
    },
]);

例によってこれで正しいのかは知らん。

other, webLaravel

Posted by admin