0

私はLaravel 4を使用しており、begsToMany関係を返しています

私のモデル

class User extends SentryUserModel implements PresentableInterface {
  public function getPresenter() {
    return new UserPresenter($this);
  }

  public function tweak() {
    return self::results();
  }

  public function tweakTwo() {
    return self::results()->get();
  }

  public function results() {
    return $this->belongsToMany('User', 'friends', 'sender_id', 'receiver_id');
  }
}

私のコントローラー

$user->tweakはオブジェクトです(Illuminate\Database\Eloquent\Collection)

foreach($user->tweak as $twk) {
}

$user->tweakTwo()はオブジェクト (Illuminate\Database\Eloquent\Collection) であり、括弧なしでは機能しません

foreach($user->tweakTwo as $twk) {
  // this results an error Call to undefined method Illuminate\Database\Eloquent\Collection::getResults()
  // this only works if I use $user->tweakTwo()
}

$user->tweakTwo に括弧が必要なのはなぜですか?


フォローアップの質問を編集

  public function tweakTwo() {
    $result_one = self::results()->get();
    $result_two = self::results_two()->get();
    return $result_one->merge($result_two);
  }

$user->tweakTwo() の代わりに $user->tweakTwo を呼び出せるように再パッケージ化するにはどうすればよいですか

4

1 に答える 1

2

括弧なしの呼び出しが行うことをすでに行っているからです。

$user->tweak === $this->belongsToMany('User', 'friends', 'sender_id', 'receiver_id')->get();
$user->tweak() === $this->belongsToMany('User', 'friends', 'sender_id', 'receiver_id');

そしてあなたがそう言うなら

$user->tweakTwo() === self::results()->get() === $this->belongsToMany('User', 'friends', 'sender_id', 'receiver_id')->get();

それから

$user->tweakTwo() === $user->tweak

$user->tweakTwo

だろう

$this->belongsToMany('User', 'friends', 'sender_id', 'receiver_id')->get()->get();
于 2013-07-25T01:09:42.950 に答える