2016-06-19 3 views
0

Я уже пробовал несколько вещей, но я не могу заставить это работать. Я хочу, чтобы иметь возможность сделать что-то вроде этого {{ $user->city->name }}принадлежитTo() не возвращает отношения для пользователя

Моя модель пользователя:

<?php 

namespace App; 

use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    public $timestamps = false; 
    protected $table = 'users'; 
    protected $fillable = ['id_city', 'name', 'email', 'password', 'admin']; 
    protected $hidden = ['password', 'remember_token']; 

    public function city() 
    { 
     return $this->belongsTo('App\City'); 
    } 
} 

И это мой город модель:

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class City extends Model 
{ 
    public $timestamps = false; 
    protected $table = 'cities'; 
    protected $fillable = ['name', 'slug']; 

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

И я пытаюсь использовать {{ $user->city->name }} на моем но он не работает, он возвращает ошибку ErrorException: пытается получить свойство не-объекта (View: .../views/app/text.blade.php).

Что мне делать?

+0

Является 'user' класса' User'? «Город» означает призыв к функции этого имени? Тогда ему нужно(). Как насчет предоставления нам [mcve]? Тогда нам не придется задавать вопросы, чтобы выяснить, что происходит; мы можем это увидеть сами. –

ответ

1

В ваших отношениях belongsTo, Eloquent пытается сопоставить city_id как внешний ключ по умолчанию, так как вы не передаете второй аргумент.

Однако, в соответствии с вашими заполняемыми атрибутами, то, что у вас есть как внешний ключ, на самом деле id_city.

Для модели пользователя,

public function city() 
{ 
    return $this->belongsTo('App\City', 'id_city'); 
} 

Для модели City,

public function users(){ 
    return $this->hasMany('App\User', 'id_city', 'id'); 
} 
+0

Спасибо за ответ. Именно то, что я искал! Просто сделал эти изменения, и он отлично работает. – noeyeat

+0

Добро пожаловать, я надеюсь, что вы отметите это как принято. – Burak

Смежные вопросы