2017-09-21 1 views
1

So versuche ich, Benachrichtigungen in der Datenbank zu speichern. Aber sobald ein Objekt des Modells mit den Werten an die Notification-Klasse übergeben wird, werden die Daten nicht darin bestanden, und ich bekomme folgende MeldungLaravel Database Notifications Werte, die beim Speichern in der Datenbank nicht im Model-Objekt vorhanden sind

Illuminate \ Database \ QueryException (HY000) SQLSTATE[HY000]: General error: 1364 Field 'post_title' doesn't have a default value (SQL: insert into posts (updated_at , created_at) values (2017-09-21 15:58:01, 2017-09-21 15:58:01))

Jetzt habe ich POST_TITLE und Post_description aber sie sind hier nicht dargestellt.

Folgende ist meine Notification Class, seltsam alles, was ich bin immer die Post info im Konstruktor verwendet, wenn ich Dump Beitrag nehme Objekt

<?php 

namespace App\Notifications; 

use Carbon\Carbon; 
use Illuminate\Bus\Queueable; 
use Illuminate\Notifications\Notifiable; 
use Illuminate\Notifications\Notification; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Illuminate\Notifications\Messages\MailMessage; 

class PostCreated extends Notification 
{ 
    use Queueable,Notifiable; 

    protected $post; 
    /** 
    * Create a new notification instance. 
    * 
    * @return void 
    */ 
    public function __construct($post) 
    { 
     $this->post = $post; 
    } 

    /** 
    * Get the notification's delivery channels. 
    * 
    * @param mixed $notifiable 
    * @return array 
    */ 
    public function via($notifiable) 
    { 
     return ['database']; 
    } 
    /** 
    * Get the array representation of the notification. 
    * 
    * @param mixed $notifiable 
    * @return array 
    */ 
    public function toArray($notifiable) 
    { 
     return [ 
      'post_id' => $this->post->id, 
      'user_id' => $this->post->user_id, 
     ]; 
    } 
} 

Lassen Sie mich wissen, wenn mehr Informationen erforderlich ist. EDIT Post Modell

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Database\Eloquent\SoftDeletes; 
use Spatie\Feed\FeedItem; 

/** 
* @property array|string post_title 
* @property array|string post_description 
* @property array|string is_featured 
* @property array|string is_rejected 
* @property mixed id 
*/ 
class Post extends Model implements FeedItem 
{ 
    use SoftDeletes; 

    /** 
    * The attributes that should be mutated to dates. 
    * 
    * @var array 
    */ 
    protected $dates = ['deleted_at','created_at','updated_at','starting_time','ending_time']; 
    protected $fillable = [ 
     'post_title', 'post_description', 'ebook_title', 'ebook_link', 'country_id', 'state_id', 'diary_id' 
    ]; 

    public function user() 
    { 
     return $this->belongsTo('App\Models\User'); 
    } 

    public function hashTags() 
    { 
     return $this->belongsToMany('App\Models\HashTag', 'hash_tag_post', 'post_id', 'hash_tag_id')->withTimestamps(); 
    } 

    public function getRelatedHashTagsAttributes() 
    { 
     return $this->tags->pluck('id'); 
    } 

    public function categories() 
    { 
     return $this->belongsToMany('App\Models\Category', 'category_post', 'post_id', 'category_id')->withTimestamps(); 
    } 

    public function state() 
    { 
     return $this->belongsTo('App\Models\Category', 'state_id', 'id'); 
    } 

    public function country() 
    { 
     return $this->belongsTo('App\Models\Category', 'country_id', 'id'); 
    } 

    public function sliders() 
    { 
     return $this->belongsToMany('App\Models\Slider', 'slider_post', 'post_id', 'slider_id')->withTimestamps(); 
    } 

    public function comments() 
    { 
     return $this->hasMany('App\Models\Comment'); 
    } 

    public function postUploadedDatas() 
    { 
     return $this->hasMany('App\Models\PostUploadedData'); 
    } 

    public function likes() 
    { 
     return $this->hasMany('App\Models\Like'); 
    } 

    public function hasAction($user) 
    { 
     if ($this->likes()->where('user_id', $user)->first()) 
     { 
      return true; 
     } 
     return false; 
    } 

    public function diaries() 
    { 
     return $this->belongsToMany('App\Models\Post', 'diary_post', 'post_id', 'diary_id'); 
    } 

    public function getFeedItemId() 
    { 
     return $this->id; 
    } 

    public function getFeedItemTitle() 
    { 
     return $this->post_title; 
    } 

    public function getFeedItemSummary() 
    { 
     return $this->post_description; 
    } 

    public function getFeedItemUpdated() 
    { 
     return $this->updated_at; 
    } 
    public function getFeedItemAuthor() : string 
    { 
     return ""; 
    } 

    public function getFeedItemLink() 
    { 
     return action('TravellersInn\[email protected]', [$this->url]); 
    } 

    public function getTipsFeed() 
    { 
     return Post::where('contant_id','LIKE','%'.'3'.'%')->get(); 
    } 
    public function getImagesFeed() 
    { 
     return Post::where('contant_id','LIKE','%'.'2'.'%')->get(); 
    } 
    public function getVideosFeed() 
    { 
     return Post::where('contant_id','LIKE','%'.'4'.'%')->get(); 
    } 
     public function getEbooksFeed() 
    { 
     return Post::where('contant_id','LIKE','%'.'6'.'%')->get(); 
    } 



} 
+0

Entschuldigung, sagen Sie, dass Sie Werte für 'post_title' und' post_description' übergeben? Müssen diese immer eingestellt werden? – dops

+0

können Sie die 'Post' Klasse einfügen? –

+0

Haben Sie Ihre Felder in die "befüllbare" Eigenschaft Ihres Modells eingefügt? – Nerea

Antwort

0

Entweder legen Wert von post_title als leer oder Update-Schema Standardwert als leer ->default("");

Spalte post_title immer einen beliebigen Wert einstellen wird benötigt, wenn Sie nicht als Standard festlegen Wert.

Auch stellen Sie sicher, post_title in Ihrem Modell

protected $fillable = ['post_title',....];// all columns 
+0

Sie haben den Punkt nicht bekommen, der Punkt ist, ich bekomme Werte für Beschreibung und Titel und sie sind bereits in befüllbar. Die Sache ist, ich bekomme bereits Werte für den Post. –

1

Es gibt ein paar löst für diese je nach hinzugefügt haben, was Sie wollen.

Wenn Sie immer einen Wert für post_title und post_description haben wollen, müssen Sie eine Validierung hinzufügen und prüfen, ob die Werte an Ihren Controller übergeben werden, damit sie in der Datenbank gesetzt werden und Ihr Modell diese Werte füllt.

Siehe https://laravel.com/docs/5.5/validation

Wenn jedoch der Titel und die Beschreibung nicht immer gesetzt, dann ist dies möglicherweise Ihre Datenbank, nicht den Code. Wenn diese Felder wahrscheinlich nicht verwendet werden, dann sollten Sie den Standardwert für jedes Feld auf '' oder NULL setzen.

soetwas wie

ALTER TABLE <table> ALTER j SET DEFAULT '';

Schließlich

Tbh Ich glaube nicht, dass Sie Konstruktor brauchen, aber ich könnte falsch sein.

+0

Sie haben den Punkt nicht bekommen, der Punkt ist, ich bekomme Werte für Beschreibung und Titel und sie sind bereits in befüllbar. Die Sache ist, ich bekomme bereits Werte für den Post. –

Verwandte Themen