Я хочу сделать систему комментариев с Eloquent Polymorphi c Relations? - PullRequest
0 голосов
/ 04 марта 2020

привет, я хочу построить систему комментариев в моих компонентах projectDetail, но при попытке сохранить комментарий в БД появляется ошибка [1048 Столбец 'commentable_id' не может быть пустым], это мой ProjectDeatil. vue скрипт:

  <script>
  export default {
      data(){
     return{
     key: this.$route.params.id,
projets:[],
projet:{
 id:'',
 name:'',
 durre:'',
 description:'',
 budget:'',
 owner:'',
   },
   membres:[],
    membre:{
    id :'',
    membre:'',
    projet_id:'',
},
 form : new Form({
            id:'',
            body:''

            })

     }


},

 methods:{
 afficherProjets(){
 axios.get('/api/getProjects')
  .then(({data}) => {this.projets=data.data});
 },
 afficherMembre(){
 axios.get('/api/membreid').then(({data})=> {this.membres =data.data});
 },
  ajouterCommentaire(){
  this.form.post('/api/comments/'+this.key).then(()=>{
  this.form.reset()})
  }

  },
  mounted() {
  console.log('Component mounted.')
  this.afficherProjets();
  this.afficherMembre();

  }

  }


 </script>

и это моя функция CommentController:

public function store($key){
     //$data =$request->all();
    $projet=new  Projet;
     $commentaire =new Commentaire;
     $commentaire->user_id= auth()->user()->id;
     $commentaire->body= request('body');
     $commentaire->commentable_id = $key;
    $projet->comments()->save($commentaire);


}

и это моя функция в комментарии к модели:

 public function commentable(){
       return $this->morphTo();
}

и эта моя функция в модельном проекте:

public function comments(){
    return $this->morphMany('App\Commentaire','commentable')->latest();
}

и это мой маршрут:

 Route::post('/comments/{key}', 'API\CommentController@store');

1 Ответ

1 голос
/ 04 марта 2020

Когда вы вызываете ->save() для полиморфных c отношений в Laravel, Eloquent волшебным образом добавит правильное поле для вас, в этом случае это будет commentable_id, поэтому вам не нужно устанавливать это, если ты делаешь ->comments()->save(). Однако вы должны получить Projet из базы данных, а затем запустить код.

Когда вы создаете новый экземпляр Projet, Eloquent не имеет ни малейшего представления, к чему это относится в базе данных. поэтому он пытается сохранить его с commentable_id из null. Замените эту строку

$projet=new  Projet;

строкой, которая может получить для вас правильный экземпляр Projet из базы данных, например:

$projet = Projet::find($key); // Assuming $key is the primary key of your Projet model.

(Во избежание сомнений, Я также рекомендую удалить строку $commentaire->commentable_id = $key; тоже.)

...