我想在Eloquent模型中添加一个自定义列,例如:
class Shape extends Eloquent
{
public function getAreaAttribute()
{
return $this->width * $this->height;
}
}
允许建立如下查询:
Shape::where('area', '>', 42)->get();
我能做的是:
Shape::select(['*', DB::RAW('width * height AS area')])->where('area', '>', 42)->get();
但这不在我的模型中。是否有可能得到像这样的东西:
class Shape extends Eloquent
{
public function getAreaColumn()
{
return DB::RAW('width * height AS area')
}
}
答案 0 :(得分:3)
您可以在迁移中定义它:
$table->integer('area')->virtualAs('height * width');
每次读取都会生成,或者
$table->integer('area')->storedAs('height * width');
如果您不希望生成始终保持不变,则希望将列存储在数据库中。
,然后将area
列添加到模型中。这样,您可以在查询和模型中使用该字段。
答案 1 :(得分:-2)
我希望这段代码对您有帮助
$result = DB::table('shape')
->select(DB::raw('width * height AS area'))
->where('area', '>', 42)
->get();