【问题标题】:Can I send a variable into laravel model?我可以将变量发送到 laravel 模型中吗?
【发布时间】:2019-02-11 22:20:32
【问题描述】:

所以我尝试使用以下方法从相关表中添加特定数据,但我不知道这是否是正确的方法。这是它的样子。

public function  transspecific($lid){
    return $this->belongsTo('raplet\Keepertrans')->where("lang_id", $lid);
}

然后我尝试从中获取数据

dd($akeeper->transspecific($akeeper->id));

它不像有任何东西,但是当我在模型中输入dd("hello") 时,它可以工作。很明显我的关系背景有问题

【问题讨论】:

  • 顺便说一句,变量$lid 也正确传递,这一切都归结为我在那里进行的微小查询。知道如何使它工作吗?
  • 你可能需要get() - dd($akeeper->transspecific($akeeper->id)->get());
  • @ceejayoz 我试过了,但是它抛出了一个我无法解决的凌乱的 SQL 错误
  • 所以给我们那个凌乱的 SQL 错误。
  • 所以主要是抛出了一个关于pivotForigenKey的SQL错误,我做了一些规定,现在没有抛出任何错误,但是也没有数据。

标签: laravel eloquent-relationship


【解决方案1】:

你想要做的是添加一个 [在 laravel 中的动态范围][1] 模型,这完全没问题。除非您需要声明与关系方法分开的范围。

关系:

public function keepertrans(){
    return $this->belongsTo('raplet\Keepertrans');
}

范围:

public function transspecific($lid){
    return $this->keepertrans()->where("lang_id", $lid);
}

然后您可以使用get() 调用范围来执行查询生成器:

(SomeOtherRelatedModel::first())->transspecific($someId)->get();

【讨论】:

  • 我不明白这里为什么需要get()
  • 似乎我在代码中犯了一些语法错误,所以这实际上是有效的。
【解决方案2】:

Eloquent 模型中用于关系的方法与您需要的不同。每当您需要添加一个自定义函数以在内部添加一些过滤器到您的查询(构建器)时,您需要使用scopes

作用域函数的通用规则是scope + yourfunction

在您的情况下,您将需要创建 scopeTranspecific 函数。

每个作用域都将第一个参数作为您在函数内部更新的构建器。后面的参数是可选的。

public function scopeTranspecific($query, $lid){

    return $query->keepertrans()->where("lang_id", $lid);
}

然后你就可以使用它了:

Model::where('column1' , 'value')->transpecific($id)->get()

如果您只是在没有->get() 的情况下转储它,您将获得查询构建器实例。您必须通过->get() 获取数据

【讨论】:

  • 对不起,先生,$query 是代表主要模型还是整个查询本身?
  • 查询生成器的实例。从概念上讲 Model::query() 给你什么。显然,当您应用 where 子句和 join 等时,它会更新。:)
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 2018-07-17
  • 2021-12-13
  • 2011-04-19
  • 1970-01-01
  • 2014-03-28
  • 2018-05-15
相关资源
最近更新 更多