【发布时间】:2021-04-10 09:37:13
【问题描述】:
大家好,stackoverflowers,
在深入研究 Laravel8 Livewire 功能时,我反复遇到以下问题。在名为 Ticker 的 Livewire 组件中,我将日历表中的一系列日期数据读取到组件属性 $days 中。
在我看来,我使用wire:click 为$days 的每个元素显示一个div 元素,它应该连接到组件的tick() 方法。
视图渲染和安装正常,但每次单击元素时,都会出现 "Trying to get property 'id' of non-object $day->id" 错误 - 好像 $days 属性已被方法调用删除或清空。谁能帮助我理解这种行为?
组件Ticker.php:
class Counter extends Component
{
public $days;
public function mount()
{
$this->days = \DB::table("caldays")->WhereBetween("id", [320, 326])->get();
}
public function render()
{
return view('livewire.ticker');
}
public function tick($id)
{
/* do stuff with selected $id */
}
}
查看ticker.blade.php:
...
@foreach($days as $day)
<div class="border border-light-blue-500 border-opacity-75 p-6 text-center"
wire:click="tick({{ $day->id }})"
>
@endforeach
...
提前致谢,祝您新年快乐,保持健康!
【问题讨论】:
-
1.你为什么不使用模型? 2.
tick()方法的代码是相关的,包括它可以提供帮助。 -
嗨 Qirel,1。也许我错了,但我知道模型仅用于输入元素,在这种情况下我们没有。你会怎么做? 2. 为了测试,我在方法中尝试了大多数不同的代码位,包括将参数分配给变量或将方法主体完全留空。总是同样的错误。
-
模型只是给定事物的表示。例如数据库记录。所以在这里有一个模型而不是使用 DB 外观是有意义的。循环时还必须使用
wire:key。了解错误发生在哪一行也会有所帮助。 -
你的建议是对的!我已将
$this->days = \DB::table("caldays")->WhereBetween...更改为$this->days = Calday::WhereBetween...,并且不再出现非对象错误。谢谢!我仍然不明白 Eloquent 和 Query Builder 集合的组件行为有何不同。
标签: components laravel-livewire