首页 文章

laravel 5.7中雄辩的一对多关系

提问于
浏览
-1

我正在尝试获取国家/地区名称的数据,

我有两个型号

1)用户模型

用户:

class Users extends Model
{


    protected $fillable = ['fname','lname','email','password','address','state','city'];


    public function address1()
    {
        return $this->hasOne('App\Addresses');
    }
}

2)地址模型

地址:

class addresses extends Model
{
    protected $fillable = ['user_id','country'];

    public function user()
    {
        return  $this->belongTo('App\users');
    }
}

现在我得到输出 - 这是一个错误:

SQLSTATE [42S22]:未找到列:1054'where子句'中的未知列'addresses.users_id'(SQL:select * from addresses其中addresses.users_id = 5且addresses.users_id不为null且addresses.id = 2 limit 1)(查看:/Applications/XAMPP/xamppfiles/htdocs/demo/resources/views/profiles.blade.php)

拜托,解决我的问题 .

1 回答

  • 1

    首先,错误告诉我们问题是什么 - 你的 addresses 表中没有 users_id 列 .

    你还没有展示你是如何尝试使用这些关系的,但我相信问题在于:

    public function user()
     {
        return $this->belongTo('App\users');
     }
    

    当您使用不遵循Laravel约定的模型名称时,您应该传递外键列名称,例如:

    public function user()
     {
        return $this->belongTo('App\users', 'user_id');
     }
    

    这里 user_id 只是一个例子 . 我不知道表中定义与用户关系的真实列名是什么 .

    但是我强烈建议您使用Laravel和PHP约定:

    • 类应该以大写字母开头,所以代替 addresses 它应该是 Addresses (记得文件名具有完全相同的情况,例如Addresses.php`

    • 模型应该是单数名词,因此它应该是地址或用户而不是地址或用户(再次确保如果你决定改变它,你也改变文件名)

相关问题