[Laravel5.8]Controller상에서 데이터 취득 후, 새롭게 프로퍼티를 추가한다

컨트롤러에 속성 추가



컨트롤러에서 데이터베이스에서 가져온 데이터에 새 속성을 추가할 수 있다는 것을 알았습니다.$object->新しいプロパティ名=〇〇에서 새로운 속성을 추가할 수 있습니다.

덧붙여 그 자리만의 것으로, 이것만으로는 프로퍼티를 보존하거나, 테이블의 컬럼을 재기록하거나 할 수 없는 것 같습니다.

전제


  • Laravel5.8 사용.
  • twitter와 같은 앱을 만들고 있습니다. 게시물 목록, 회원 가입, 로그인, 트윗 게시물, 좋아요.

  • 코드



    다음은 앱의 controller의 일부를 발췌한 것입니다.
    목록을 표시하는 게시물 데이터를 가져오고 게시물에 대해 좋아하는 버튼을 누르면 속성을 추가합니다.

    PostController.php
        public function index()
        {
          $posts = Post::with('likes')->latest()->paginate(20);
          $user_id = Auth::id();
          if($user_id){
            foreach($posts as $post){
              foreach($post->likes as $like){
                if($like->user_id===$user_id){
                  //新しく追加するプロパティ
                  $post->liked_id = $like->id;
                }
              }
            }
          }
          return view('index')->with('posts',$posts);
        }
    

    dd($post)에서 $post의 속성을 확인하면 속성이 추가되었음을 알 수 있습니다.

    속성 추가 전
    attributes: array:5 [▼
        "id" => 18
        "created_at" => "2005-11-09 09:04:07"
        "updated_at" => "1999-11-01 17:05:26"
        "body" => "Libero nihil eum nam suscipit."
        "user_id" => 4
      ]
    

    속성 추가 후
    attributes: array:6 [▼
        "id" => 18
        "created_at" => "2005-11-09 09:04:07"
        "updated_at" => "1999-11-01 17:05:26"
        "body" => "Libero nihil eum nam suscipit."
        "user_id" => 4
        "liked_id" => 6
    

    새로운 프로퍼티은 기존의 프로퍼티와 같이, $post->propaty 로 사용할 수가 있습니다.
    앱은 $post->liked_id가 존재하는지 여부로 화면의 표시를 바꾸거나 링크를 전환하는 데 사용하고 있습니다.
    이제 내가 게시물에 좋아요를 눌렀을 때 표시를 변경하는 기능을 구현할 수있었습니다.



    또한 EagerLoad와 결합하여 쿼리를 줄이거나 사용자의 속성에 맞게 동적으로 속성을 추가, 변경할 수 있다고 생각합니다. 조금 편리 할 수 ​​있습니다.

    참고



    【Laravel】EagerLoad 정리. 동적 속성과 Eloquent 관계의 차이 등
    Laravel 5.7에서 기본 CRUD 만들기
    (여기를 참고로 앱을 만들어 주셨습니다. 감사합니다)

    좋은 웹페이지 즐겨찾기