Laravel Определение отношений

У меня есть одна таблица с именем Content которая является основной таблицей, как

Content : id content_name created_at updated_at

и другой стол Course лайк

Course table have many content_id

Course : id content_id course_name created_at updated_at

Я создал отношения, как это.

Content Model

class Content extends Eloquent {

protected $table = 'contents';
protected $guarded = array('id');

public function course()
{
return $this->belongsTo('Course');
}
}

Course Model

class Course extends Eloquent {

protected $table = 'courses';
protected $guarded = array('id');


public function content()
{
return $this->hasMany('Content');
}
}

Когда я получаю данные, как это
$courses=Course::find(1)->content;

Выдает ошибку вроде

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец ‘contents.course_id’ в ‘предложении where’ (SQL: select * from contents где contents,course_id = 1)

Я не могу исправить проблему в отношениях, поскольку я новичок в Laravel.

1

Решение

Близко, но у вас ваши отношения задом наперед. Таблица, которая имеет внешний ключ, является той, которая принадлежит другой. В этом случае ваш course таблица имеет внешний ключ content_id, следовательно Course принадлежит Content, а также Content имеет один или много Courses.

class Content extends Eloquent {
public function course() {
return $this->hasMany('Course');
}
}

class Course extends Eloquent {
public function content() {
return $this->belongsTo('Content');
}
}
1

Другие решения

в ваших миграциях (create_courses_table), обязательно установите иностранный ключ как это ,

$table->integer('content_id)->unsigned()->index();
$table->foreign('content_id')
->references('id')
->on('contents')
->onDelete('cascade');
0

Я не очень понимаю ваш дизайн стола, может быть, это должно быть что-то вроде этого.

Принимая ваше заявление: «Таблица курса имеет много content_id«. Я понимаю, что вы говорите, что 1 курс может иметь несколько материалов, верно? Если да, вы можете изменить дизайн таблицы на что-то вроде ниже

Course
======
id
course_name
created_at
updated_at

Content
=======
id
course_id (set this as FK)
content_name
created_at
updated_at

код миграции для контента

public function up()
{
Schema::create('content', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('course_id')->unsigned();
$table->string('content_name');
});

Schema::table('content',function($table)
{
$table->foreign('course_id')->references('id')->on('course')->onDelete('cascade');
});
}

Тогда в вашей модели

class Course extends Eloquent
{
protected $table = 'course';

public function content()
{
return $this->hasMany('content', 'course_id', 'id');
}
}

class Content extends Eloquent
{
protected $table = 'content';

public function course()
{
return $this->belongsTo('course', 'course_id', 'id');
}
}

Затем получить доступ к вашим данным через нетерпеливую загрузку

$course = Course::with('content')->get();

ИЛИ ЖЕ

$content = Content::with('course')->get();
0

Это об определении ассоциаций. Ваши ассоциации должны быть:

содержание
Содержание имеет много курсов

class Content extends Eloquent {

protected $table = 'contents';
protected $guarded = array('id');

public function courses()
{
return $this->hasMany('Course');
}
}

Курс

Курс относится к содержанию.

class Course extends Eloquent {

protected $table = 'courses';
protected $guarded = array('id');


public function content()
{
return $this->belongsTo('Content');
}
}

Таким образом, вы можете сделать запрос ассоциации.
Для поиска контента -> курсы:

$courses = Content::find(1)->courses;

Для нахождения курса -> содержание:

$content = Course::find(1)->content;
0
По вопросам рекламы [email protected]