【问题标题】:Laravel 4 multiple hasmany for same tableLaravel 4多个hasmany用于同一张桌子
【发布时间】:2014-07-24 10:05:09
【问题描述】:

我有一个 laravel 4 应用程序,在这个应用程序中,我需要定义一个与另一个模型相关的模型 2 次,但要区分类型。

例子

class Car extends Eloquent{

     public function oldDrivers(){
        return $this->hasMany('Driver');
     }

     public function newDrivers(){
        return $this->hasMany('Driver');
     }

}

所以关系将是driver 表中的car ID,问题是当我只想获取某辆车的旧司机时,它会返回两个关系中的所有司机。

查看时我发现因为它是同一个表,所以现在我在 Driver 模型中设置了一个类型,现在我希望我的关系被这种类型过滤,所以 oldDrivers 将只是具有oldDrivers 和 new Drivers 的类型将是仅设置了 newDriver 类型的 Drivers,

如何在 Laravel 中做到这一点?

【问题讨论】:

    标签: php laravel laravel-4 eloquent


    【解决方案1】:

    你可以试试这样的:

    class Car extends Eloquent{
    
         public function oldDrivers(){
            return $this->hasMany('Driver')->where('type', 'olddrivers');
         }
    
         public function newDrivers(){
            return $this->hasMany('Driver')->where('type', 'newdrivers');
         }
    
     }
    

    假设您在数据库中有type 字段作为过滤器。如果我对 type 字段有误,那么您只需将 field 名称更改为正确的名称,因为您知道如何使用 where 子句添加过滤器。

    【讨论】:

    • 你想如何过滤?使用什么字段,例如->where('fieldname', 'fieldvlaue')
    • 我把它和 ->where('type','oldDrivers') 一起用了,但是没有用
    • 您的drivers 数据库中是否有type 字段并且type 字段是否包含oldDriversnewDrivers?也许应该是olddriversoldDriver 甚至olddriver
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2018-06-06
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2014-04-02
    • 2017-02-07
    相关资源
    最近更新 更多