php - 쿼리 - 엘로 퀀트 update




Laravel/Eloquent 모델의 기본 속성 값을 설정하는 방법은 무엇입니까? (2)

이것에 대한 업데이트 ...

@ j-bruni가 제안서를 제출했고 Laravel 4.0.x가 이제 다음을 사용하여 지원합니다.

protected $attributes = array(
  'subject' => 'A Post'
);

구성 할 때 자동으로 귀하의 속성을 A Post subject 으로 설정합니다. 그의 대답에서 언급 한 사용자 정의 생성자를 사용할 필요가 없습니다.

그러나, 만약 당신이 생성자를 사용하여 $this->setRawAttributes() 나는 Carbon::now() 를 사용하기 위해해야 ​​할 것처럼) $this->setRawAttributes()$attributes 위의 배열. 예 :

protected $attributes = array(
  'subject' => 'A Post'
);

public function __construct(array $attributes = array())
{
    $this->setRawAttributes(array(
      'end_date' => Carbon::now()->addDays(10)
    ), true);
    parent::__construct($attributes);
}

// Values after calling `new ModelName`

$model->subject; // null
$model->end_date; // Carbon date object

// To fix, be sure to `array_merge` previous values
public function __construct(array $attributes = array())
{
    $this->setRawAttributes(array_merge($this->attributes, array(
      'end_date' => Carbon::now()->addDays(10)
    )), true);
    parent::__construct($attributes);
}

자세한 내용은 Github 스레드를 참조하십시오. https://github.com/laravel/framework/issues/2265

속성을 선언하려고하면 다음과 같이됩니다.

public $quantity = 9;

... 그것은 "속성"으로 간주되지 않고 모델 클래스의 속성으로 간주되기 때문에 작동하지 않습니다. 뿐만 아니라 실제로 존재하고 존재하는 "수량"속성에 대한 액세스를 차단합니다.

그렇다면 어떻게해야합니까?


이것이 내가 지금하고있는 일이다.

protected $defaults = array(
   'quantity' => 9,
);

public function __construct(array $attributes = array())
{
    $this->setRawAttributes($this->defaults, true);
    parent::__construct($attributes);
}

우리는 이것을 PR로 제안 할 것이므로 모든 모델에서이 생성자를 선언 할 필요가 없으며 우리 모델에서 $defaults 배열을 선언함으로써 쉽게 적용 할 수 있습니다 ...

업데이트 :

cmfolio가 지적한 것처럼 실제 ANSWER는 매우 간단합니다 .

$attributes 속성을 무시하십시오! 이렇게 :

protected $attributes = array(
   'quantity' => 9,
);

이 문제는 여기에서 다루었습니다 : https://github.com/laravel/framework/issues/2265





eloquent