ダイナミッククエリパラメータでグローバルスコープを使用する際に問題が発生しています。グローバルスコープはマネージャIDに基づいていますが、$ modelは空です。$ thisはモデルではなくマネージャスコープを参照します。したがって、$ this-> idは未定義のプロパティです。このような何かを行うにはそこに方法がある:Laravel 5動的パラメータを使用するグローバルスコープ
public function apply(Builder $builder, Model $model)
{
return $builder->where('manager', $model->id); // $this->id
}
私は$model
がマネージャモデルであるために仮定されていることを仮定しているが、それは空で、私はそれ上の任意のドキュメントを見つけることができませんので、私はありません誰かが私がそれを感謝するコメントで私に教えることができれば完全に確かです。これは、マネージャモデルでは、当社のグローバルスコープ方法である:
protected static function boot()
{
parent::boot();
static::addGlobalScope(new ManagerScope);
}
グローバルスコープが明示的な方法を適用する必要はありませんので、私はブートに何かを追加することなどの追加のパラメータの何かのためにできる可能性があるかもしれないと思った。
protected static function boot()
{
parent::boot();
static::addGlobalScope(new ManagerScope($this->id);
}
これは静的メソッドでは許可されていませんが、これはエラーを見た後には意味があります。
ありがとうございます。実際には、現在認証されているユーザ(この場合はマネージャ)をミドルウェアのトークンから取得するために使用される遅延サービスプロバイダがあります。ローカルスコープを使用したくない理由は、開発者の間違いを避けることでした。なぜなら、それはアプリケーションのセキュリティ上の問題になるからです。しかし、それは申請者の関係に直接つながる可能性があります。あなたは$モデルをどのように使うべきか説明できますか?私は理にかなった例を見つけることができません。 – mtpultz
組み込みの 'SoftDeletingScope'は、モデルデータを保持するテーブルの' 'deleted_at'"カラムの完全修飾名を調べるために '$ model'が使われる良い例です。モデル内のその列の名前。 – peterm
それはどんな方法で助けましたか? – peterm