さて、質問があります。私は本当に複雑なレポートをプログラミングしており、インターフェイスはLaravel 5.2を使用しています。今は、特定の条件によっては、ユーザーが必ずしもすべてのパラメータを入力する必要はありません。しかし、わかりやすくするために、レポートには何があっても常に完全なパラメータセットが受信されるように作成しました。だから私は3つのテーブルを持っている:Laravel 5.2の関係を使用してデフォルト値でパラメータを設定する
tblReportParam
ID
ParamName
DefaultValue
tblReportParamValue
ParamID
ReportID
Value
tblReport
ID
UserName
は今、私は機能するソリューションを持っていますが、私はモデルとの関係をより有効に活用することができるはずのようないくつかの理由で、それだけで感じています。私は基本的に私のモデルとコントローラだけを持っていて、SQLを使ってすべてを解決しました。
thisに多少近いと感じますが、それほどではありません。基本的には、すべてのパラメータを常にロード/保存する必要があります。パラメータxが実際にユーザによって定義されていれば、その定義を使用します。そうでない場合は、tblReportParamで定義されたデフォルトを使用します。誰にどのようにこれを行うにはどのような考えがありますか?
EDIT:わかりましたので、私はエディの答えをチェックし、我々のシステムでそれを仕事にしようとしたが、私の他の同僚がtblReportParamValueとtblReportとtblReportParamテーブル間の多対多の関係を実装し始め
ピボットとして機能するので、私はこのソリューションを私たちのシステムに適応させるのにいくつかの困難を抱えています。ここでは、2つのモデルがあります:(すなわち、関係が実際に存在する)
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');
}
}
は今、これは実際にはかなりきちんとした解決策ですが、パラメータは、ピボットテーブルに実際にある場合にのみ動作します。私たちが望むのは、ピボットテーブルにないパラメータの場合、単にデフォルト値が必要なだけです。この場合、Eddyのソリューションは使えますか?今tblReportParamValue
は、あなたがあなたの関係を再定義する必要があり、ピボットテーブルであることを雄弁モデル
class ReportParam extends Model
{
public function paramValue() {
return $this->hasOne('App\ReportParamValue', 'ParamID');
}
public function getDefaultValueAttribute($value) {
if ($this->paramValue) return $this->paramValue->Value; //relationship exists
return $this->DefaultValue;
}
}
$reportParam->value; // return the relationship value or the default value;
UPDATE
を使用して
あなたのソリューションは多対多の関係に対応できますか? – Osuwariboy
もちろん、すべてのコレクションをチェックするために2番目の機能を変更する必要があります。 – EddyTheDove
私はあなたが何を意味するのかを視覚化するのに少し問題があります。いくつかのコードを投稿できますか?前もって感謝します :)。 – Osuwariboy