2016-08-10 4 views
0

Я хочу отобразить друзей пользователя. Но я получаю следующее сообщение об ошибке:Call to undefined method (laravel 5.2)

BadMethodCallException in Builder.php line 2345: Call to undefined method Illuminate\Database\Query\Builder::friends()

FriendController:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 

use App\User; 

use Auth; 

class FriendController extends Controller 
{ 
    public function getIndex(){ 
    $friends=Auth::user()->friends(); 
    return view('friends',['friends'=>$friends]); 
    } 
} 

Маршрут: модель

Route::get('/friends',[ 
'uses' => '[email protected]', 
'as' => 'friends', 
'middleware' => 'auth:web' 
]); 

Пользователь:

public function getName(){ 
    if($this->firstname && $this->lastname){ 
     return "{$this->firstname} {$this->lastname}"; 
    } 
    if($this->firstname) 
     return $this->firstname; 
    return null; 
} 

public function getNameOrUsername(){ 
    return $this->getName() ?: $this->username; 
} 

public function getFirstNameOrUsername() { 
    return $this->firstname ?: $this->username; 
} 

Мое мнение:

<div id="grp" class="panel-heading"> 
    <h3 id="grouptitle" class="panel-title">Your Friends</h3> 
    @if(!$friends->count()) 
    <p>you have no friends</p> 
    @else 
    @foreach($friends as $user) 
    @include('userblock') 
    @endforeach 
    @endif 
</div> 

userblock.blade:

<div class="media"> 
<a href="{{ route('myplace', ['username'=>$user->username]) }}" class="pull-left"> 
    <img src="" class="media-object" alt="{{ $user->getNameOrUsername() }}"> 
</a> 
<div class="media-body"> 
    <h4 class="media-heading"><a href="#">{{ $user->getNameOrUsername() }}</a></h4> 

</div> 

+1

Где описывается ваше «друзья» отношение отношение? –

+0

@ rap-2-h u означает отношение между моделью друзей и моделью пользователя? –

+0

Да :) У вас есть метод 'friends' в вашей модели User? –

ответ

1

Похоже, что у вас есть много-много отношений между пользователем и его друзьями (снова пользователь). Таким образом, мы можем использовать метод belongsToMany() для извлечения друзей выбранного пользователя как Users.
Для этого добавьте следующую функцию в свою модель User.

public function friends(){ 
    return $this->belongsToMany('App\User::class','friends','user_id','friend_id')->withPivot('accepted'); 
} 

Чтобы получить друг в данный момент loged используется пользователь следующего:

$friends = Auth::user()->friends()->get(); 
1

Предполагая friends связаны пользователи и у вас есть friend_id столбец в вашей user таблицы, вы могли бы добавить метод friends в вашей User модели:

public function friends() 
{ 
    return $this->hasMany(\App\User::class, 'friend_id'); 
} 

Вы можете подробнее об отношениях here. Для этой цели вы также можете использовать package. Или выполните поиск по SO о "self reference relation laravel"

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