2016-03-12 4 views
2

меня определить пользователя отношения с портфелем, но это дает мне пустой модель мой пользовательLaravel Eloquent связь не работает

class User extends Model implements AuthenticatableContract, 
            AuthorizableContract, 
            CanResetPasswordContract 
{ 
    use Authenticatable, Authorizable, CanResetPassword; 
    protected $table = 'users'; 
    protected $fillable = ['name', 'email', 'password']; 
    protected $hidden = ['password', 'remember_token']; 

    public function portfolio() 
    { 
     $this->hasMany('App\Portfolio'); 
    } 

} 

Мой портфель модель

class Portfolio extends Model 
{ 

    protected $fillable = ['user_id', 'ptitle', 'pdate','pedate','purl','languages','pdes','attachments']; 

    public function user() 
    { 
     $this->belongsTo('App\User'); 
    } 
    public function attachments() 
    { 
     $this->hasMany('App\Attachment'); 
    } 
} 

и я определить внешний ключ миграции мой код перехода:

public function up() 
    { 
     Schema::create('portfolios', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->integer('user_id')->unsigned(); 
      $table->string('ptitle'); 
      $table->timestamps(); 
      $table->foreign('user_id') 
        ->references('id') 
        ->on('users') 
        ->onDelete('cascade'); 
     }); 
    } 

Я снова запускаю миграцию. когда я пытаюсь получить пользовательские портфели, дающие мне нулевое значение, я объявляю это на вершине моего контроллера use App\User;, тогда я нахожу пользователя по этой команде $user=User::find(1) и, наконец, я делаю это $user->portfolio(), но это дает мне нуль. Я застрял в этом от 2 до 3 часа, пожалуйста, помогите мне

+0

да я одна строки в моей таблице –

+0

имени таблицы 'portfolios' –

+0

я попробовать это, но это дает мне ошибку' метод отношений должны возвращать объект типа Illuminate \ Database \ Eloquent \ Relations \ Relation' –

ответ

6

вы должны вернуть отношения, чтобы получить данные соотношению

public function portfolio() 
{ 
    return $this->hasMany('App\Portfolio'); 
} 
+0

О, мужчина! Я пропустил это;) Хорошие глаза у вас есть :) –

+0

спасибо, что он работает сейчас –

0

Базовый пример shortend установки (используется в следующем примере):

class User extends Model { 
    public function portfolio() 
    { 
     //you missed the return 
     return $this->hasMany('App\Portfolio'); 
    } 

} 
class Portfolio extends Model { 
    public function user() 
    { 
     //you missed the return 
     return $this->belongsTo('App\User'); 
    } 
} 

Предполагая, что вы пользователь с идентификатором 1 и связанная с ним запись портфолио:

$mUser = User::findOrFail(1); //Return User model 
$mUserLazy = User::with('portfolio')->findOrFail(1); //Preload portfolio 

$mPortfolioQueryBuilder = $mUser->portfolio(); //QueryBuilder 

$aPortfolio = $mUser->portfolio; //Portfolio Collection 
$aPortfolio = $mUserLazy->portfolio; //Portfolio Collection 
$aPortfolio = $mPortfolioQueryBuilder->get(); //Portfolio Collection 
+0

Спасибо, что он работает сейчас –

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