【问题标题】:Laravel 4: can one model serve several DB tables?Laravel 4:一个模型可以服务多个数据库表吗?
【发布时间】:2013-09-05 17:29:06
【问题描述】:

在我的应用程序中,我有几个 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';
}

【问题讨论】:

  • 不,这不是 ORM 的一般工作方式。从您的数据结构的外观来看,您并没有发挥 SQL 的优势。您的每个表是否偶然具有相同的列名?
  • 是的,我的桌子都是一样的。每个都有大约 100 行(可能是 90 行,或者 110 行),我每天更新每个城市。好吧,我可以将所有城市保留在一张表中,但在性能方面单独更新它们不是更好吗?

标签: php laravel laravel-4 eloquent


【解决方案1】:

您可以在实例化模型后执行$model->setTable('mytable'),但是对于多个表,我宁愿建议您创建一个具有您需要的所有功能的“基本”模型,然后创建几个其他类,这些类扩展了这个类但定义了自己的带有protected $table = 'table' 的表。

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

【讨论】:

    【解决方案2】:

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

    创建一个 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() );
    

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多