所以我想在数据库中保存通知。但是,一旦将带有值的模型的对象传递给Notification类,数据就不会保留在其中,并且我会收到以下消息
Illuminate \ Database \ QueryException(HY000) SQLSTATE [HY000]:常规错误:1364字段'post_title'没有默认值(SQL:插入
posts
(updated_at
,created_at
)值(2017-09-21 15:58:01,2017-09-21 15:58:01))
现在我有 Post_title和Post_description ,但这里没有显示。
以下是我的通知类,奇怪的是,如果我转储发布对象
,我会在构造函数中获取所有与帖子相关的信息<?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,
];
}
}
如果需要更多信息,请与我们联系。 编辑:发布模型
<?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\PostController@getFeedItems', [$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 :(得分:1)
根据你的需要,有几个解决方案。
如果您总是想要post_title
和post_description
的值,那么您需要添加一些验证并检查值是否已传递到您的控制器以在db中设置并且您的模型将填补这些价值。
请参阅https://laravel.com/docs/5.5/validation
但是,如果标题和说明始终未设置,那么这可能是您的数据库,而不是您的代码。如果这些字段有时可能未被使用,那么您希望将每个字段的默认值设置为&#39;&#39;&#39;&#39;或者是NULL。
有点像
ALTER TABLE <table> ALTER j SET DEFAULT '';
<强>最后强>
Tbh我认为你不需要那个构造函数,但我可能错了。
答案 1 :(得分:0)
将post_title
的值设为空白或更新架构,将默认值设置为
空白
->default("");
如果未设置为默认值,则始终需要列post_title
任何值。
还要确保在模型中添加了post_title
protected $fillable = ['post_title',....];// all columns