我尝试使用laravel echo和pusher构建聊天应用程序,一切正常但返回数据库的数据为null或默认值,这里是代码
public function sendMessage(Request $request){
$conID = $request->conID;
$message1 = $request->message;
$user = Auth::user();
$fetch_userTo = DB::table('messages')
->where('conversation_id', $conID)
->where('user_to', '!=', Auth::user()->id)
->get();
$userTo = $fetch_userTo[0]->user_to;
$message = Message::create([
'user_from' => Auth::user()->id,
'user_to' => $userTo,
'conversation_id' => $conID,
'message' => $message1,
]);
if($message) {
$userMsg = DB::table('messages')
->join('users', 'users.id','messages.user_from')
->where('messages.conversation_id', $conID)->get();
broadcast(new MessagePosted($message))->toOthers();
return $userMsg;
}
}
注意:当我在查询中放入insert()而不是create时,数据会正常通过数据库,但广播中出现错误
答案 0 :(得分:1)
您是否尝试过创建此类消息?而不是使用模型事件?
$message = new Message;
$message->user_from = Auth::user()->id;
$message->$user_to = $userTo;
$message->conversation_id = $conID;
$message->message = $message1;
$message->save();
你有更多的控制方式,即
if($message->save()) { ... }
或者你可以将整件事包装在交易中?
确保您的消息模型允许您在$ fillable数组中添加的字段
答案 1 :(得分:0)
创建方法检查可填充属性到Laravel模型中。您必须将所有列写入fillable,然后使用create方法。
第二种解决方案是使用Active Record技术。 @Devin Greay的回答有助于使用Active record。
更多信息请访问https://laravel.com/docs/5.6/eloquent#mass-assignment