Используйте переменную в отношениях - PullRequest
1 голос
/ 27 марта 2019

У меня есть некоторые функции настраиваемых полей на моем сайте, где пользователи могут добавлять настраиваемые поля в модель.

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

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

public function getEmptyCustomfields($model)
{
    return  $this->has('customfield', '<', 1)
                        ->select('customfieldslabels.id as label_id', 'customfieldslabels.datatype as datatype', 'customfieldslabels.label_name as label_name',
                                'customfieldslabels.customfield_tab_id as customfield_tab_id', 'customfieldstabs.name as name')
                        ->join('customfieldstabs', 'customfieldstabs.id', '=', 'customfieldslabels.customfield_tab_id')
                        ->where('customfieldstabs.model', '=', $model)
                        ->get();

}

public function getEmptyCustomfieldsByTab($tabIDm)
{
    return $this->has('customfield', '<', 1)->where('customfield_tab_id', '=', $tabID)->get();
}

Это то, что у меня было изначально, и я понял, что если у метки есть поле, назначенное другой модели, то связь существуети не будет возвращаться пустым для другой модели.

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

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

public function customfieldByModel($modelID)
{
    return $this->has('customfield' => function ($query) use ($modelID){
        $query->where('model_id', '=', $modelID);
    })->get();
}

public function getEmptyCustomfields($model, $modelID)
{
    return  $this->has($this->customfieldByModel($modelID), '<', 1)
                        ->select('customfieldslabels.id as label_id', 'customfieldslabels.datatype as datatype', 'customfieldslabels.label_name as label_name',
                                'customfieldslabels.customfield_tab_id as customfield_tab_id', 'customfieldstabs.name as name')
                        ->join('customfieldstabs', 'customfieldstabs.id', '=', 'customfieldslabels.customfield_tab_id')
                        ->where('customfieldstabs.model', '=', $model)
                        ->get();

}

public function getEmptyCustomfieldsByTab($tabIDm, $modelID)
{
    return $this->has($this->customfieldByModel($modelID), '<', 1)->where('customfield_tab_id', '=', $tabID)->get();
}

Я хотел бы вернуть пустые поля для одной модели, для которой они еще не были заполнены.

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

ОБНОВЛЕНИЕ

Я пытался использовать левое соединение, которое, я думаю, будет работать, но я не могуметод сталuse Я получаю сообщение об ошибке: «Имя метода должно быть строкой»

Я изменил это

public function getEmptyCustomfieldsByTab($tabID, $modelID)
{
    return $this->has($this->customfieldByModel($modelID), '<', 1)->where('customfield_tab_id', '=', $tabID)->get();
}

На это:

public function getEmptyCustomfieldsByTab($tabID, $modelID)
{
    return $this->has('customfieldbymodel', '<', 1)->where('customfield_tab_id', '=', $tabID)->get();
}

Но теперь я могуне отправлять $ modelID в качестве параметра.Можно ли заблокировать параметр во время выполнения команды has?

МОЕ РЕШЕНИЕ

Я создал защищенную переменную в модели, которая просто переназначается каждый раз.

protected $modelID;


public function customfieldByModel()
{
    return $this->hasMany(Customfield::class)->where('model_id', '=', $this->modelID);
}

public function getEmptyCustomfields($model, $modelID)
{
    $this->modelID = $modelID;
    return  $this->has('customfieldByModel', '<', 1)
                        ->select('customfieldslabels.id as label_id', 'customfieldslabels.datatype as datatype', 'customfieldslabels.label_name as label_name',
                                'customfieldslabels.customfield_tab_id as customfield_tab_id', 'customfieldstabs.name as name')
                        ->join('customfieldstabs', 'customfieldstabs.id', '=', 'customfieldslabels.customfield_tab_id')
                        ->where('customfieldstabs.model', '=', $model)
                        ->get();

}

public function getEmptyCustomfieldsByTab($tabID, $modelID)
{
    $this->modelID = $modelID;
    return $this->has('customfieldByModel', '<', 1)->where('customfield_tab_id', '=', $tabID)->get();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...