2016-12-21 5 views
-1

Я пытаюсь понять, чего я здесь не хватает.Яркие отношения не работают, как ожидалось

приложение миграция

Schema::create('apps', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('show_id')->unsigned()->index(); 
    $table->string('name'); 
    $table->integer('provider_id')->unsigned()->index(); 
    $table->timestamps(); 
}); 

Показать миграции

Schema::create('shows', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name'); 
    $table->timestamps(); 
}); 

Так я создаю модель приложения, которые имеют следующую функцию

public function Show() { 
    return $this->hasOne(Show::class); 
} 

Но в PHP ремесленника повозиться, когда я делаю $ приложения -> Показать; Я получаю следующую ошибку:

Illuminate\Database\QueryException with message 'SQLSTATE[HY000]: General error: 1 no such column: shows.app_id (SQL: select * from "shows" where "shows"."app_id" = 1 and "shows"."app_id" is not null limit 1)' 

Я неправильно понимаю отношения?

ответ

1

Ваше отношение должно быть:

приложения Модель:

public function show() { 
    return $this->hasOne(Show::class, 'id', 'show_id'); 
} 

Или это может быть:

public function show() { 
    return $this->belongsTo(Show::class); 
} 

Docs

1

У вас нет app_id в миграции ваших шоу.

редактировать: Принимая из Laravel Docs и изменить его в соответствии с вашей ситуации

Eloquent determines the foreign key of the relationship based on the model name. In this case, the show model is automatically assumed to have a app_id foreign key.

0

в приложениях модели:

public function Show() { 
    return $this->belongsTo('yourmodelnamespace\Show','id','show_id'); 
} 

И вам нужно создать шоу модель тоже .. Надеюсь, что это будет работает ~~

1

Связь один-к-одному состоит из hasOne и belongsTo. Таблица, содержащая поле внешнего ключа, должна быть на стороне belongsTo.

Поскольку ваша apps таблица содержит show_id поле, указывается, что apps принадлежат shows и shows имеет одну (или многие) apps.

Для этого необходимо изменить свои отношения Show к вашей модели Apps, чтобы использовать отношения belongsTo.

public function Show() { 
    return $this->belongsTo(Show::class, 'show_id'); 
} 

Если вы не переименовать метод отношения, так что в нижнем регистре (function show()), требуется второй параметр.Если вы переименовали отношения, Laravel может построить правильное имя ключа, и вы могли бы оставить от второго параметра:

public function show() { 
    // For belongsTo, second parameter defaults to {function_name}_id. 
    return $this->belongsTo(Show::class); 
} 
0

Вы можете использовать связь, как это

public function Show() { return $this->hasOne(Show::class, 'id','id'); }

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