Laravel 4:一个模型可以服务几个数据库表吗?

时间:2013-09-02 14:54:47

标签: php laravel laravel-4 eloquent

在我的应用程序中,我有几个mysql表:多伦多,温哥华,蒙特利尔等...我正在使用DB-class来处理它们,例如。

$data = DB::select('select * from toronto where id = ?', array($id));

我想要做的是开始使用Eloquent。我是Laravel的新手,只是想知道是否有可能让一个模型与几个表一起工作,如:

class City extends Eloquent {
      protected $table_a = 'toronto';
      protected $table_b = 'vancouver';
      protected $table_c = 'montreal';
}

2 个答案:

答案 0 :(得分:12)

它不能,但你可以。有很多方法,一个是:

创建一个City模型,在其构造函数中询问表名:

class City extends Eloquent {

    public function __construct($city, array $attributes = array())
    {
        parent::__construct($attributes);

        $this->table = $city;
    }

}

要使用它,您必须使用表名实例化您的类:

$toronto = new City('toronto');

然后你可以随心所欲地做任何事情:

var_dump( $toronto->where('id',701057)->get() );

答案 1 :(得分:2)

一旦你有一个模型,你可以$model->setTable('mytable'),但对于多个表我宁愿建议你做一个" base"您需要所有功能的模型,然后是其他几个扩展此类但使用protected $table = 'table'定义自己的表的类。

但是,在您的情况下,听起来您根本不应该将数据保存在单独的数据库表中。如果您可以找到一种方法将状态存储为列而不是单独的表,那就更好了。