拉拉维尔属于不工作

2022-08-30 14:27:46

我的应用程序中有2个模型,“用户”和“MedicineType”(每个用户属于一个MedicType)。

我使用 belongsTo() 和 hasMany() 在两个模型之间建立了一对多的关系。hasMany() 关系工作完美,但 belongTo() 不起作用。有谁知道我在哪里犯了错误?

用户::查找(1)->medicine_type [这不返回任何内容]

药物类型::查找(1)->用户 [这返回用户]

以下是模型的代码:

class MedicineType extends Eloquent {

    public function users()
    {
        return $this->hasMany('User');
    }
}


class User extends Eloquent {

    public function medicine_type()
    {
        return $this->belongsTo('MedicineType');
    }
}

这是我的数据库结构:

users:
    id
    name
    medicine_type_id 

medicine_types:
    id
    name

答案 1

您的关系不起作用的原因不是因为模型中指定的关系,而是因为 User 模型中的方法命名,而不是指定外键。

而不是:

public function medicine_type()
{
    return $this->belongsTo('MedicineType');
}

用:

public function medicineType()
{
    return $this->belongsTo('MedicineType', 'id');
}

我希望这对你有用 ;)

一切结合在一起:

<?php // app/models/MedicineType.php

class MedicineType extends Eloquent {

   // Determines which database table to use
   protected $table = 'medicine_types';

   public function users() 
   {
      return $this->hasMany('User');
   }

}

和:

<?php // app/models/User.php

class User extends Eloquent {

   // Determines which database table to use
   protected $table = 'users';

   public function medicineType() 
   {
      return $this->belongsTo('MedicineType', 'id');
   }

}

测试它是否有效:

$user = User::find(1);
return $user->medicineType->name;

这将成功返回相关medicine_type的名称。

我希望这有助于您进一步;)


答案 2

也许Eloquent找到外键有问题。试试这个:

class User extends Eloquent {

    public function medicine_type()
    {
        return $this->belongsTo('MedicineType', 'medicine_type_id');
    }
}

编辑:

此外,Eloquent尝试查找表“medicinetypes”而不是“medecine_types”,因此您还需要使用变量来指定该表。$table

class MedicineType extends Eloquent {
    protected $table = 'medicine_types';

    public function users()
    {
        return $this->hasMany('User');
    }
}

推荐