次のようなモデルがあるとします。
ユーザーモデル
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();