【问题标题】:Livewire Error: public property [message] must be of type: [numeric, string, array, null, or boolean]Livewire 错误:公共属性 [message] 必须是类型:[numeric、string、array、null 或 boolean]
【发布时间】:2021-06-12 06:48:37
【问题描述】:

我遇到了这个问题,我不明白我做错了什么,因为我对这个网站上的另一个组件采用了同样的方法,并且运行良好......

ViewMessages.php

public $messages;

public function mount($messages)
    {
        $this->messages = $messages;
    }

查看消息.blade.php

<div class="flex flex-col">
        @foreach ($messages as $message)
                {{$message->content}}
        @endforeach
</div>

一切正常,并正确输出所有消息。

当我尝试将 livewire 组件传递给 for each 时,它会给出错误。

@foreach ($messages as $message)
       @livewire('chat.show-message', ['message'=>$message], key('show-message-'.$message->id))
@endforeach

// ShowMessage.php
public $user;
    public $message;
    public $user_id;
    public $content;
  

    public function mount($message)
    {
        $this->message = $message;
    }

老实说,我对自己做错了什么感到迷茫,因为我复制了完全相同的代码并更改了我之前使用的变量。当我做嵌套组件时,它现在可以在网站上运行。

<div class="flex flex-col space-y-4 py-4 overflow-y-auto">
     @foreach ($chats as $chat)
          @livewire('kanbans.show-sidebar-chat-message', ['chat'=>$chat], key('chat-'.$chat->id))
     @endforeach
</div>

我已经重做了这个组件两次,并且找不到任何语法问题或拼写错误。 =/

【问题讨论】:

  • 可能public $message;应该是public string $message;
  • 您的Message 是否易于序列化以通过网络发送,即发送到数组?
  • 您使用的是哪个版本的 livewire?是 1x 还是 2x
  • 我在 livewire 2x 上

标签: laravel laravel-livewire


【解决方案1】:

问题在于 DB Facade 查询

$messages = DB::select('SELECT * FROM chat_messages 
         WHERE (receiver_id = :auth_id and user_id = :user) OR (receiver_id = :user2 AND user_id = :auth_id2)',
   ['auth_id' => $auth_id, 'user' => $user->id, 'auth_id2' => $auth_id, 'user2' => $user->id]);

虽然还不确定如何传入$user-&gt;id,但是当我将用户 ID 设置为 #2 时,livewire 组件按预期工作。

public function view($user)
    {
        $user=User::where('id',$user)->firstOrFail();

        $messages = ChatMessage::where(function ($query){
                                $query->where('user_id', '=', auth()->id() )
                                        ->where('receiver_id', '=', 2 );
                                })->orWhere(function ($query){
                                    $query->where('user_id', '=', 2)
                                        ->where('receiver_id', '=', auth()->id() );
                                    })->get();
        
        return view('backend.chat.view-contact-chat',compact('user','messages'));
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2023-03-30
    相关资源
    最近更新 更多