2013-12-24 6 views
1

Резюмеметод отношения Laravel ORM метания ошибка 'BelongsToMany'

Я получаю следующее сообщение об ошибке при попытке вызвать зависимость:

Объект класса Осветите \ Database \ Eloquent \ Relations \ BelongsToMany не может быть преобразован в строку

Моя установка очень проста, и состоит из двух моделей, User и Role.

пользователя Модель [User.php]

<?php 
use Illuminate\Auth\UserInterface; 

class User extends Eloquent implements UserInterface { 

    protected $table = 'users'; 
    protected $hidden = array('password'); 
    protected $fillable = array('id', 'username', 'password'); 


    public function getAuthIdentifier() { 
     return $this->getKey(); 
    } 

    public function getAuthPassword() { 
     return $this->password; 
    } 
} 

Role Model [Role.php]

<?php 
class Role extends Eloquent { 

    protected $table = "roles"; 
    protected $fillable = array(
     'id',   
     'code', 
     'name' 
    ); 

    public function foo() { 
     return $this->belongsToMany('User', 'map_role_user', 'role_id', 'user_id'); 
    } 
} 

И, наконец, я звоню метод foo в файле маршрутов, пример:

Route::get('role', function() { 
     return Role::find(1)->foo(); 
    }); 
+6

попробовать это 'Роль :: найти (1) -> Foo' – Anam

+0

Это было именно это. Ура! – Chris

ответ

5

От

https://laravel.com/docs/5.3/eloquent-relationships или https://laravel.com/docs/4.2/eloquent#relationships

Если коллекция отливают в строку, она будет возвращена в формате JSON:

<?php 
$roles = (string) User::find(1)->roles; 
+0

Я допинг! Благодаря! Я потратил час, просто глядя на это. Спасибо – Chris

+0

Из интереса, роли возвращают 'user' плюс данные в сводной таблице,' map_role_user', но не 'role'. Мне нужно будет итератировать вручную, верно? – Chris

+1

Пользователь :: find (1) -> ролями будет возвращать все данные о ролях, но ничего о пользователе. Если вам нужна информация о пользователе и ролях, вы можете сделать $ user = User :: find (1), а затем вы можете использовать $ users в качестве коллекции и вызвать $ users-> role, чтобы показать данные о ролях этого пользователя. –

1

Если вы не хотите, чтобы добавить дополнительные ограничения на запрос, то у вас есть использовать dynamic properties концепции. Так,

$user = App\User::find(1); 

foreach ($user->posts as $post) { 
    // 
} 

Если вы хотите добавить больше ограничений, то сделать это

App\User::find(1)->posts()->where('title', 'LIKE', '%Best%')->get() 
Смежные вопросы