Laravel查询范围混淆(hasmany relation,error:object无法转换为字符串)

时间:2018-03-28 14:42:13

标签: laravel

我想将gettitle方法更改为范围,但收到错误"对象无法转换为字符串"。

查询范围是否比方法具有速度优势?创建范围有什么好处?

我有一张产品表。然后有一个带有product_titles的表,它也有一个language_id。

每种产品都可以有多种标题,因为它们可以使用不同的语言。

public function scopeGettitle($language_id="1")
{

    return self::product_titles()->select('title','information')
                                ->where("language_id","=",$language_id);
}

  public function product_titles ()
{
    return $this->hasMany(ProductTitle::class);
}

在刀片文件中,我使用以下代码:

$title=$book->gettitle()->first();

谢谢

编辑: 这似乎是正确的方式:

public function scopeGettitle($query, $language_id="1")
{
return $query
    ->select('title','information')
    ->where("language_id","=",$language_id);
}

$producttitle=$product->product_titles()->gettitle()->first();

我的问题是,是否有任何理由为什么这比简单地创建一个我可以这样调用的方法更好:     $ producttitle = $产品 - >的getTitle();

创建一个" bylanguage"标题模型中的范围。

1 个答案:

答案 0 :(得分:0)

范围参数应在$query参数

之后定义
  

$query

     

\Illuminate\Database\Eloquent\Builder

public function scopeGettitle($query, $language_id="1")
{
    return $query
        ->product_titles()
        ->select('title','information')
        ->where("language_id","=",$language_id);
}