【问题标题】:Call to undefined method (laravel 5.2)调用未定义的方法(laravel 5.2)
【发布时间】:2016-12-16 13:13:38
【问题描述】:

我想显示用户的朋友。但我收到以下错误:

Builder.php 第 2345 行中的 BadMethodCallException:调用未定义 方法 Illuminate\Database\Query\Builder::friends()

朋友控制器:

 <?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' => 'FriendController@getIndex',
'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>

【问题讨论】:

  • 你的“朋友”关系描述在哪里?
  • @rap-2-h 你的意思是朋友模型和用户模型的关系?
  • 是的 :) 你的 User 模型中有 friends 方法吗?
  • 抱歉没有收到你的信息?
  • @rap-2-h 和我没有申请关系

标签: php laravel laravel-5 laravel-5.2


【解决方案1】:

看起来你在user模型作为用户和它的朋友(又是一个用户)之间有多对多的关系。所以,我们可以使用belongsToMany()方法来检索选定用户的朋友Users
为此,请将以下函数添加到您的 User 模型中。

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

要获取当前登录用户的朋友,请使用以下方法:

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

【讨论】:

    【解决方案2】:

    假设friends 是相关用户并且您的user 表中有一个friend_id 列,您可以在User 模型中添加一个friends 方法:

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

    您可以阅读更多关于关系 here 的信息。您也可以使用package 来满足此需求。或者在SO上搜索“自引用关系laravel”

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 1970-01-01
      • 2016-04-03
      • 2017-02-20
      • 2016-12-11
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 2015-05-31
      相关资源
      最近更新 更多