2013-10-03 4 views
0

Я попытался понять процесс сохранения модели с несколькими отношениями, но я до сих пор не могу понять, как это сделать «кошерный» способ.Laravel4 - Сохранение модели с несколькими отношениями/внешними ключами

Для начала - у меня есть модель событий, которая принадлежит к категории (Eventcat) и Адрес:

// Event.php 

class Event extends Eloquent { 

protected $table = 'events'; 

public function location() 
{ 
    return $this->belongsTo('Location'); 
} 

public function eventcat() 
{ 
    return $this->belongsTo('Eventcat'); 
} 

public function users() 
{ 
    return $this->belongsToMany('User'); 
} 

} 

// Location.php 

class Location extends Eloquent 
{ 

protected $table = 'locations'; 

public function events() 
{ 
    return $this->hasMany('Event'); 
} 

} 

// Eventcat.php 

class Eventcat extends Eloquent 
{ 
protected $table = 'eventcats'; 

public function events() 
{ 
    return $this->hasMany('Event'); 
} 
} 

Я посеяна базу данных с несколькими категориями и места, и теперь я пытаюсь получить события, сохраняющие работу. Я думал, что $event->eventcat()->associate($eventcat) будет работать, но я получил ошибку Call to undefined method eventcat().

public function postCreateEvent() { 

    $event = new Event(); 

    $eventcat = Eventcat::find(Input::get('event-create-eventcat[]')); 
    $location = Location::find(Input::get('event-create-location[]')); 

    $event->title = Input::get('event-create-title'); 
    $event->description = Input::get('event-create-description'); 
    $event->price = Input::get('event-create-price'); 
    $event->start_date = Input::get('event-create-start_date'); 
    $event->end_date = Input::get('event-create-end_date'); 

    $event->eventcat()->associate($eventcat); 
    $event->location()->associate($location); 

    $event->save(); 

} 

Я прочитал документацию, API и несколько потоков здесь, но я до сих пор не могу понять, что лучший способ справиться с этим.

Спасибо за ответы!

ответ

1

Я бы сделал ставку на то, что у вас есть конфликт в имени вашего класса. Laravel содержит класс Event, и мне интересно, не то ли это, что вы вызываете в коде. В качестве быстрого теста вы можете переименовать свой класс FooEvent и посмотреть, работает ли он.

Лучшее решение, вероятно, включает в себя пространство имен вашей модели (см. http://chrishayes.ca/blog/code/laravel-4-methods-staying-organized для быстрого ввода), чтобы ваша модель все еще называлась событием без противоречия со встроенным классом.

+0

Да, это была проблема. Я действительно думал о том же ответе, вернулся сюда, чтобы поделиться и увидеть твою :) Большое спасибо! – troophel

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