如何正确地更新数据库中的多个数据
如何正确地更新数据库中的多个数据
我正在跟着Laracasts的视频学习:基本的模型/控制器/视图工作流程。
我有一个包含联系信息的表。
CREATE TABLE `about` ( `id` int(10) UNSIGNED NOT NULL, `title` varchar(500) COLLATE utf8_unicode_ci NOT NULL, `content` text COLLATE utf8_unicode_ci, ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
我尝试在控制器文件中使用以下代码将数据传递给视图:
public function index() { $about = Page::where('page', 'about-me')->get(); //id = 3 return view('about', compact('about')); }
当我尝试像下面这样显示代码时,我收到一个错误:
@section('title') {{$about->title}} @stop @section('content') {!! $about->content !!} @stop
错误信息为:
此集合实例上不存在属性[title]。(视图:E:\laragon\www\newsite\resources\views\about.blade.php)
但是,如果我在控制器文件中更改检索方法,它就可以工作。
public function index() { $about = Page::find(3); return view('about', compact('about')); }
当我在第一个情况下(where()->get()
)使用dd($about)
时,数据被封装在一个数组中。而在第二个情况下(find(3)
),它按预期显示数据。
我做错了什么?
在使用工厂函数时,可能会遇到这个问题,所以我可以确认这是有效的语法:
$user = factory(User::class, 1)->create()->first();
如果你做了类似这样的操作,可能会看到集合实例错误:
$user = factory(User::class, 1)->create()->id;
所以将其更改为:
$user = factory(User::class, 1)->create()->first()->id;
问题的出现原因是在获取数据时,使用了错误的语法。解决方法是通过添加`first()`方法来获取集合中的第一个数据,然后再获取该数据的id。这样就可以正确地更新超过一个数据在数据库中。以上就是正确更新超过一个数据在数据库中的方法。