如何在雄辩模型中选择RAW列?

时间:2019-02-06 13:45:15

标签: php laravel

我想在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')
    }
}

2 个答案:

答案 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();