Laravel 属于不工作

2021-12-26 00:00:00 orm php laravel laravel-4 eloquent

我的应用中有 2 个模型,用户"和'MedicineType'(每个用户属于一个 MedicineType).

I have 2 models in my app, 'User' & 'MedicineType' (each User belongs to one MedicineType).

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

I made the one-to-many relation between two model using belongsTo() and hasMany(). hasMany() relation works perfectly but belongTo() doesn't work. Does anyone know where did I make a mistake?

User::find(1)->medicine_type [这不返回任何内容]

User::find(1)->medicine_type [this returns nothing]

MedicineType::find(1)->users [返回用户]

MedicineType::find(1)->users [this returns users]

这是模型的代码:

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

推荐答案

你的关系不工作的原因不是因为模型中指定的关系,而是因为 User 模型中的方法命名而不是指定外部键.

The reason your relation is not working is not because of the relations specified in the model, but because of the method naming in the User model and not specifying the foreign key.

代替:

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 的名称.

This successfully returns the related medicine_type's name.

我希望这能帮助你进一步;)

I hope this helps you further ;)

相关文章