如何在基于SQL语句的单个Eloquent模型中使用表和视图?

时间:2015-06-09 20:01:26

标签: php mysql eloquent laravel-5

使用Laravel 5.1,我创建了一个Eloquent Model:

class Divisions extends Model
{
}

我的数据库中有一个表和一个与该模型相关的视图。

  • divisions_info - 该表格会运行INSERTUPDATE个查询,但不会在其上运行SELECT
  • divisions_view - 视图,它只会SELECT个查询运行(显然)。
  

分段的原因是divisions_view视图与来自divisions_info表的数据以及相邻数据库中另一个相关的只读表连接。 < / p>

我想将一个模型用于处理各个部分的所有内容,但是指向UPDATE表上的所有INSERT / divisions_info个查询以及所有SELECT个查询divisions_view查看。

Laravel documentation允许您覆盖假定的表名,如下所示:

protected $table = 'divisions_info';

但是,这优先于整个模型。我希望能够利用Eloquent模型带来的所有内置方法,但是它会在SQL语句中进行相应的拆分。

这可能吗?如果是这样,实现它的正确方法是什么?

如果不可能,不考虑意见,在两个不同的位置使用相同数据的最合乎逻辑/ Laravel式的方法是什么?

1 个答案:

答案 0 :(得分:5)

这可能是一个解决方案:

use Illuminate\Database\Eloquent\Model;

class Division extends Model {
    public function scopeFromView($query)
    {
        return $query->from('divisions_view');
    }
}

只需在查询的任何部分调用fromView()方法,如下所示:

Division::fromView()->get();