Laravel での addSelect() ビルダーメソッドの動作 質問する

Laravel での addSelect() ビルダーメソッドの動作 質問する

次のようなモデルがあるとします。

ユーザーモデル

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'User';

    protected $fillable =
    [
       'username', 'favoriteColor'
    ];          

    public function flights()
    {
        return $this->hasMany('App\Flight');
    }
}

フライトモデル

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'Flight';

    protected $fillable =
    [
       'flightName', 
    ];              
}   

私は、これを行うたびに、Eager Loading で何かをしようとしています:

$usersWithFlights = User::with(['flights'])->get();

次のようなデータを取得します: (問題がなければ、期待どおりです)

{
    "userID": 1,
    "favoriteColor": green
    "flights": 
    [
       {
           "flightID": 2240,
           "flightName" : "To Beijing fellas"
       },
       {
           "flightID": 4432,
           "flightName" : "To Russia fellas"
       },       
    ]
}

しかし、次のように select raw を使用して列を追加したいと思います: (これがどれほどばかげているか考えないでください1 as number。これは単なる例です。

$usersWithFlights = User::with(['flights'])->addSelect(DB::raw('1 as number'))->get();

次のようなデータを取得します:

[
    {
        "userID": 1,
        "favoriteColor": green
        "flights": []
    }
]

質問

addSelect() メソッドはこのような動作のために作られたのでしょうか? そうでない場合、これを実現するための他の回避策はありますか?

注記

selectメソッドに次のようなものを追加できることはわかっていますFlights.*, Users.*が、addSelectメソッドがそのように動作するかどうかを知りたいのです

ベストアンサー1

選択からデフォルト値が必要で、さらに追加したい場合は、次の構文を使用できます。

$usersWithFlights = User::with(['flights'])->select()->addSelect(DB::raw('1 as number'))->get();

おすすめ記事