Я использую средства доступа Laravel, и все они работают, кроме двух из них:
public function getLambdaDCheckboxAttribute($value)
{
...
}
где имя столбца БД lambda_d_checkbox и
public function getUber40CheckboxAttribute($value)
{
...
}
где имя столбца БД — uber_40_checkbox.
Я предполагаю, что проблема в первом примере заключается в пении буквы «d» между двумя подчеркиваниями и числом «40» во втором примере. Как я могу выполнить вызов этих методов?
У меня есть следующая структура:
class UploadIconsRES extends Eloquent{
private $verbesserte_text = "";
private $verbesserte_image = "";
private $lambda_d_text = "";
private $lambda_d_image = "";
public function getVerbesserteCheckboxAttribute($value)
{
if($value == "yes")
{
$this->verbesserte_image= 'http://h02b.ebau.at/austrotherm/1280/'.DB::table('upload_icons_url')->where('id', 1)->pluck('icon_url');
$this->verbesserte_text = DB::table('upload_icons_text')->where('id', 1)->pluck('icon_name');
}
return $value;
}
public function getLambdaDCheckboxAttribute()
{
if($this->lambda_d_checkbox == "yes")
{
$this->lambda_d_image ='http://h02b.ebau.at/austrotherm/1280/'.DB::table('upload_icons_url')->where('id', 34)->pluck('icon_url');
$this->lambda_d_text = DB::table('upload_icons_text')->where('id', 34)->pluck('icon_name');
}
return $value;
}
public function toArray()
{
$array = parent::toArray();
$array['icons'] = array();
if($this->verbesserte_image != "")
{
$icon = array();
$icon['url'] = $this->verbesserte_image;
$icon['text'] = $this->verbesserte_text;
array_push($array['icons'], $icon);
}
if($this->lambda_d_image != "")
{
$icon = array();
$icon['url'] = $this->lambda_d_image;
$icon['text'] = $this->lambda_d_text;
array_push($array['icons'], $icon);
}
return $array;
}
затем…
class ProductMetaRES extends Eloquent {
protected $table = 'products_meta_res';
protected $primaryKey = 'product_id';
public function UploadIconsRES()
{
return $this->hasMany("UploadIconsRES", "productID", "id");
}
}
затем…
class ProductLangRes extends Eloquent
{
protected $table = 'products_lang_res';
public function ProductMetaRES()
{
return $this->hasOne("ProductMetaRES", "product_lang_FS");
}
}
И, наконец, когда я вызываю, используйте эти классы в моем контроллере следующим образом:
$content = ProductLangRES::with( 'ProductMetaRES.UploadIconsRES')->get(array('id', 'de_AT as name', 'de_AT_description as description'));
У меня не получается нужный icon_url и icon_text. Кроме того, у меня есть больше аксессоров в тех классах, которые работают нормально, но я не включил их в пример здесь для простоты.
Вы можете сделать это так:
public function getLambdaDCheckboxAttribute()
{
return $this->lambda_d_checkbox;
}
public function getUber40CheckboxAttribute()
{
return $this->uber_40_checkbox;
}
Других решений пока нет …