2014-12-30 2 views
1

У меня возникли проблемы с тем, чтобы мои отношения с Laravel не работали. В моем приложении есть отношения «один ко многим» между пользователями и идеями. (У пользователя может быть несколько идей.) Я использую Ardent.Laravel/Ardent - on save(), error: метод связи должен возвращать объект типа Illuminate

Вот моя модель пользователя:

 

use Illuminate\Auth\UserTrait; 
use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableTrait; 
use Illuminate\Auth\Reminders\RemindableInterface; 

use LaravelBook\Ardent\Ardent; 

class User extends Ardent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'users'; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = array('password', 'remember_token'); 
    protected $fillable = array('first_name', 'last_name', 'email', 'password'); 

    public $validation_errors; 
    public $autoPurgeRedundantAttributes = true; 
    public $autoHashPasswordAttributes = true; 
    public $autoHydrateEntityFromInput = true; 

    public static $passwordAttributes = array('password'); 

    public static $rules = array(
     'first_name'   => 'required|between:1,16', 
     'last_name'    => 'required|between:1,16', 
     'email'     => 'required|email|unique:users', 
     'password'    => 'required|between:6,100' 
    ); 

    public function ideas() 
    { 
     return $this->hasMany('Idea'); 
    } 
} 

И вот моя идея модель:

 

use LaravelBook\Ardent\Ardent; 

class Idea extends Ardent { 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'ideas'; 

    protected $fillable = array('title'); 

    public $validation_errors; 
    public $autoPurgeRedundantAttributes = true; 
    public $autoHydrateEntityFromInput = true; 

    public static $rules = array(
     'title'   => 'required' 
    ); 

    public function user() 
    { 
     return $this->belongsTo('User'); 
    } 
} 

Наконец, вот мой код контроллера:

 
class IdeasController extends BaseController { 

    public function postInsert() 
    { 
     $idea = new Idea; 

     $idea->user()->associate(Auth::user()); 

     if($idea->save()) 
     { 
      return Response::json(array(
       'success' => true, 
       'idea_id' => $idea->id, 
       'title' => $idea->title), 
       200 
      ); 
     } 
     else 
     { 
      return Response::json(array(
       'success' => false, 
       'errors' => json_encode($idea->errors)), 
       400 
      ); 
     } 
    } 

} 

$ idea-> Сохранить() выдает ошибку:

{ 
    "error": { 
    "type": "LogicException", 
    "message": "Relationship method must return an object of type Illuminate\\Database\\Eloquent\\Relations\\Relation", 
    "file": "\/var\/www\/3os\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Eloquent\/Model.php", 
    "line": 2498 
    } 
} 

Сначала я пытался установить user_id в идее так:

$idea->user_id = Auth::id(); 

Затем я изменил его:

$idea->user()->associate(Auth::user()); 

Но результаты были одинаковыми.

Любые предложения были бы очень признательны.

+0

Что вы хотите, чтобы вы хотели сохранить много идей для пользователя? –

+0

В этом конкретном случае я хочу сохранить одну идею, связанную с пользователем. – clone45

ответ

1

Вы не можете использовать associate в этом направлении, так как он может использоваться только для связи belongsTo. В вашем случае идея принадлежит пользователю, а не наоборот.

Я подозреваю, что при сохранении ошибки возникает ошибка при создании идеи без требуемого названия, а затем вы пытаетесь получить ошибки, вызывая $idea->errors, тогда как это должно быть $idea->errors().

+0

Спасибо. Auth :: id() и Auth :: user() -> id, похоже, одно и то же. Чтобы проверить, я напечатал их, и оба напечатали один и тот же идентификатор пользователя. Спасибо за отзыв о помощнике, но я все еще потерян! – clone45

+0

Хорошо, я обновил свой ответ на основе ваших отзывов. – lowerends

+0

Блестящий! Извините за дикую гусиную погоню. Вы были абсолютно правы. – clone45

0

associate будет работать на belognsTo отношениях, в вашей причине то, что вам нужно использовать, - это привязать аналогичную модель. Подробнее о подключении соответствующего режима в documentation.

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

  • Нет связанных вопросов^_^