我可以将变量发送到laravel模型吗?

时间:2019-02-11 22:20:32

标签: laravel eloquent--relationship

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

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

然后我尝试从中获取数据

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

它没有任何作用,但是当我在模型中键入dd("hello")时,它可以工作。很明显,我的关系上下文有问题

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

在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()来获取数据