Могу ли я отправить переменную в модель Laravel? - PullRequest
0 голосов
/ 12 февраля 2019

Так что я пытаюсь добавить, получить конкретные данные из связанной таблицы, используя метод ниже, но я не знаю, является ли это правильным способом сделать это.вот как это выглядит.

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

и затем я пытаюсь получить от него данные

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

это не действует так, как будто ничего нет, но когда я печатаю dd("hello")внутри модели это работает.так ясно, что у меня что-то не так с контекстом моих отношений

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Методы, доступные в Eloquent для отношений, отличаются от тех, которые вам нужны.Всякий раз, когда вам нужно добавить пользовательскую функцию, которая внутренне добавляет некоторые фильтры к вашему запросу (компоновщик), вам нужно использовать области действия

Общее правило функции области действия scope + yourfunction

В вашем случае вам нужно будет создать функцию scopeTranspecific.

Каждый контекст получает первый аргумент в качестве компоновщика, который вы обновляете внутри функции.Более поздние аргументы являются необязательными.

public function scopeTranspecific($query, $lid){

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

И затем вы можете использовать его:

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

Если вы просто сбросите его без ->get(), вы получите экземпляр построителя запросов.Вам нужно будет сделать ->get(), чтобы получить данные

0 голосов
/ 12 февраля 2019

То, что вы пытаетесь сделать, - это добавить модель [динамический охват в 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();
...