Итак, у меня есть вопрос. Я программирую очень сложный отчет, и интерфейс использует Laravel 5.2. Теперь дело в том, что в зависимости от определенных условий пользователь не всегда должен заполнять все параметры. Однако для целей простоты я сделал это так, чтобы отчет всегда получал полный набор параметров независимо от того, что. Поэтому у меня есть три таблицы:Заполнение параметров значением по умолчанию с использованием отношений в Laravel 5.2
tblReportParam
ID
ParamName
DefaultValue
tblReportParamValue
ParamID
ReportID
Value
tblReport
ID
UserName
Теперь у меня есть решение, которое работает, но по некоторым причинам, он просто чувствует, что я должен быть в состоянии сделать лучше использовать модели и отношений. У меня в основном есть только мои модели и контроллеры, и я решил все это с помощью SQL.
Чувствуется несколько близко к this, но не совсем. Поэтому в основном вам нужно всегда загружать/сохранять все параметры. Если параметр x фактически определен пользователем, тогда вы используете его определение, иначе вы идете по умолчанию, заданному в tblReportParam. Кто-нибудь знает, как это сделать?
EDIT:
Хорошо, так что я проверил ответ Эдди и пытался работать его в нашей системе, а другой мой коллега приступил к реализации отношений многие-ко-многим между tblReport и таблицей tblReportParam с tblReportParamValue действуя как стержень, поэтому мне сложно адаптировать это решение для нашей системы. Вот эти две модели:
class ReportParam extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'tblReportParam';
protected $primaryKey = 'ID';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['ID', 'NomParam', 'DefaultValue'];
public function renourapports()
{
return $this->belongsToMany('App\Report');
}
}
class Report extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'tblReport';
protected $primaryKey = 'ID';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['ID', 'NoEmploye', 'NoClient', 'NoPolice', 'DateCreation', 'DateModification', 'runable', 'DernierEditeur'];
public $timestamps = false;
public function params()
{
return $this->belongsToMany('App\ReportParam ', 'tblReportParamValue', 'ReportID', 'ParamID')->withPivot('Valeur');
}
}
Теперь это на самом деле является довольно изящное решение, но это работает только если параметр на самом деле в сводной таблице (то есть отношения на самом деле существует). Мы хотим, чтобы для параметров, которые не находятся в сводной таблице, мы просто хотим их значение по умолчанию. Может ли решение Эдди работать в этом случае?
Можете ли ваше решение работать в отношениях многих-ко-многим? – Osuwariboy
Конечно, но вам нужно будет изменить вторую функцию, чтобы проверить всю вашу коллекцию. – EddyTheDove
У меня проблемы с визуализацией, что вы имеете в виду. Не могли бы вы разместить какой-то код? Заранее спасибо :). – Osuwariboy