2015-09-28 2 views
1

Я одну таблицу с именем Content, который является мастером таблицы, какLaravel Определение связей

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'); 
    } 
} 

Когда я fething данные как этот $courses=Course::find(1)->content;

Он бросает ошибку как

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

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

+0

Почему 'course' принадлежат к' 'Course' и content' имеет много' Content'? –

+0

так что было бы вероятным решением для этого :(Пожалуйста, помогите мне bro – afzylive

+0

У вас есть таблица курса в таблице содержимого в вашей базе? – geoandri

ответ

1

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

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

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

Приветствия! экономит мое время! – afzylive

0

в ваших миграциях (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(); 

OR

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

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

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

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; 
Смежные вопросы