【问题标题】:laravel using scope methodlaravel 使用范围方法
【发布时间】:2017-10-29 14:37:12
【问题描述】:

我正在尝试学习 laravel 范围,我创建了我的第一个范围,但我收到此错误消息 npw

Support.php 第 26 行中的错误异常: 未定义属性:Illuminate\Database\Eloquent\Builder::$User

这是一行

public static function getTicket($id)
{
    $ticket = Support::where('id', $id)->User::owner(Auth::user()->id)->first();
    return $ticket;
}

这是在用户模型中

public function scopeOwner($query, $flag)
{
    return $query->where('user_id', $flag);
}

用户与支持之间的关系

public function user()
{
    return $this->belongsTo('App\User');
}

你能解释一下我做错了什么吗?

【问题讨论】:

  • 我的第一个猜测是:Support::where('id', $id)->user->owner(Auth::user()->id)->first();但是支持模型必须与用户模型相关。
  • 确实如此,但我仍然遇到同样的错误
  • Support::where('id', $id)->user()->owner(Auth::user()->id)->first(); ?
  • 现在我在 Builder.php 第 2451 行得到了这个 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::user()
  • 您能否说明您如何定义支持和用户之间的关系?

标签: php laravel scope


【解决方案1】:

您使用的范围有误。范围应该在您希望使用它的模型中。所以把它移到Support模型。

public function scopeOwner($query, $id)
{
    return $query->where('user_id', $id);
}

public static function getTicket($id)
{
    $ticket = Support::where('id', $id)->owner(Auth::user()->id)->first();

    return $ticket;
}

你也可以这样做

public static function getTicket($id)
{
    $ticket = static::where('id', $id)->owner(auth()->id())->first();

    return $ticket;
}

【讨论】:

    【解决方案2】:

    像这样删除“User::”:

    public static function getTicket($id)
    {
        $ticket = Support::where('id', $id)->owner(Auth::user()->id)->first();
        return $ticket;
    }
    

    然后将函数 scopeOwner 从用户模型移动到支持模型。

    【讨论】:

    • 它现在可以工作了,但是,我应该在同一个模型中定义作用域吗?
    猜你喜欢
    • 1970-01-01
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多