【问题标题】:laravel 4 - understanding model and database tables relationshipslaravel 4 - 理解模型和数据库表的关系
【发布时间】:2014-10-21 12:27:23
【问题描述】:

我正在学习 laravel,我有以下问题:

  1. 是否需要数据库表与模型完全匹配?例如:我可以有这种情况吗:在 DB 中:table1、table2、table3 但在 laravel 模型中我有 groupOfTables.php,其中 groupOfTables 代表数据库中的所有 3 个表。

  2. 我数据库中的所有 3 个表都是相关的。我可以在 groupOfTables 上使用什么查询来从所有三个表中检索记录?

谢谢!

【问题讨论】:

    标签: laravel laravel-4


    【解决方案1】:

    我不建议将模型与多个表关联。这是对 Eloquent ORM 使用的误解。

    如果您的数据库中的表是相关的,则可以在模型方法中描述这些关系。这是一个使用 3 个相关模型的示例。汽车、制造商和零件。

    表格

    • 汽车
    • 制造商
    • 零件

    模型

    • 汽车
    • 制造商
    • 部分

    这是您的Car 模型的示例。一辆车只有一个制造商,但有很多零件。我们用这些方法告诉 Laravel。

    class Car extends Eloquent {
    
      public function manufacturer() {
        $this->belongsTo('Manufacturer');
      }
    
      public function parts() {
        $this->hasMany('Part');
      }
    
    }
    

    要查询属于汽车的所有部件,我们可以这样做:

    Car::find(1)->parts();
    

    这是查找带有id1Car,并返回属于它的所有部分。续集查询将执行类似于此的操作:

    select * from car where id = 1
    select * from parts where user_id = 1
    

    这里是制造商和零件的示例。在下面的逻辑中,我们说“一个零件只属于一辆车,而制造商有很多辆车”。

    class Part extends Eloquent {
    
      public function car()
      {
        $this->belongsTo('Car');
      }
    
    }
    
    class Manufacturer extends Eloquent {
    
      public function cars()
      {
        $this->hadMany('Car');
      }
    
    }
    

    然后我们可以这样使用:

    Manufacture::find(1)->cars(); // what cars does a manufacturer with an id of 1 own
    Part::find(3)->car(); // what car owns the part with an id of 3
    

    我知道这并不能直接回答您的问题,但希望这能阐明如何正确使用模型关系。

    【讨论】:

    • 感谢罗斯埃德曼的详细解释!我的模型中有另一个与 $fillable 相关的问题:假设我有 $fillable = { car​​_id, manufacturer_name, parts_name) ,其中 car_id 在汽车表中,制造商名称在制造商中,parts_name 在零件表中。所以当我这样做时: Car::find(1)->parts(); $fillable 的其他字段(来自制造商和零件表)也会被填充吗?
    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    相关资源
    最近更新 更多