2016-09-22 2 views
1

$ casts를 사용하여 배열의 데이터를 데이터베이스에 저장하고 있습니다. 나는 그 문제가있다.

데이터를 데이터베이스의 기존 배열로 밀어 넣을 수 있습니까? 예를 들어, 이미 내 db 열에있는 데이터의 배열을 가지고있다 : ["some_data", "another_el"] 등등 그리고 컨트롤러에서 나는이 배열을 db의 입력에서 다른 데이터에 넣고 싶다.

$brand = Brand::find($request->input('brand')); 

     $brand->model = $request->input('model'); 
     $brand->update(); 

이런 식으로 데이터를 푸시하십시오.

+0

당신이 배열 DB 데이터 타입의 DB 지정된 필드에 업데이트 하시겠습니까? Laravel의 Array Casting은 데이터를 setter의 JSON으로만 serialize하고 getter에서 PHP 배열로 다시 공유합니다. – Adiasz

+0

예, 데이터를 DB의 기존 배열로 푸시합니다. – pwnz22

답변

2

Eloquent의 질량 지정 기능 (업데이트, 작성 등)으로는이 작업을 수행 할 수 없습니다. 필드를 풀고 변경 한 다음 모델을 저장해야합니다.

$collection = collect($brand->field); 
$collection->push($myNewData); 
$brand->field = $collection->toJson(); 
$brand->save(); 
0

방법 1

$brand = Brand::find($request->input('brand')); 

    $brand->model = array_merge($brand->model, [$request->input('model')]); 
    $brand->update(); 

방법이

$brand = Brand::find($request->input('brand')); 

    $brand->addModel($request->input('model')); 
    $brand->update(); 

그리고 엔티티에 (내가 좋아하는 그것은 논리 캡슐화 때문에) :

public function addModel($value) 
    { 
      $this->model = array_merge($this->model, [$value]); 
    } 

옵션

그리고 엔티티 (대신 $casts)에 :

public function setModelAttribute($value) 
    { 
      $this->attributes['model'] = json_encode($value); 
    } 

    public function getModelAttribute($value) 
    { 
      return json_decode($value, true); 
    } 
+0

Laravel에서 그렇게하지 마십시오.) [$ casts] (https://laravel.com/docs/5.2/eloquent-mutators#attribute-casting)를 사용하십시오. – pwnz22

+0

@ pwnz22 mutators는 $ casts의 대안이 될 수 있습니다 (나는 대답을 편집했습니다). – Matheus