Php 调用Laravel中的成员函数时出错

Php 调用Laravel中的成员函数时出错,php,laravel,Php,Laravel,我正在Laravel 7上建立一个博客,当我尝试创建一篇文章时,我遇到以下错误: Call to a member function categories() on bool 以下是我的控制器中的存储方法: public function store(Request $request) { // Validate incoming data $this->validate($request, [ 'title' =>

我正在Laravel 7上建立一个博客,当我尝试创建一篇文章时,我遇到以下错误:

Call to a member function categories() on bool
以下是我的控制器中的存储方法:

public function store(Request $request)
    {
        // Validate incoming data
        $this->validate($request, [
            'title' => 'required',
            'image' => 'required',
            'categories' => 'required',
            'body' => 'required',
        ]);

        $data = array();
        $data['title'] = $request->title;
        $data['slug'] = str_slug($request->title);
        $data['user_id'] = Auth::id();
        $data['meta_title'] = $request->meta_title;
        $data['meta_description'] = $request->meta_description;
        $image = $request->file('image');
        $data['body'] = $request->body;
        $data['created_at'] = \Carbon\Carbon::now();

        $slug = str_slug($request->title);
        
        if($image) {
            $image_name = $slug . "-" . date('dmy_H_s_i');
            $ext = strtolower($image->getClientOriginalExtension());
            $image_full_name = $image_name . '.' . $ext;

            $upload_path = "public/assets/frontend/uploads/posts/";
            $image_url = $upload_path . $image_full_name;
            $success = $image->move($upload_path, $image_full_name);

            $data['image'] = $image_url;
            $post = DB::table('posts')->insert($data);
            

            $post->categories()->attach($request->categories);
            return redirect(route('admin.posts.index'))->with('successMsg', 'Post has been saved successfully!');
        }
}
“laravel错误”页面的这一行有问题:

$post->categories()->attach($request->categories);
我的数据库中有一个单独的表,用于连接帖子id和类别id,它称为category\u post 除category_post表中的新记录外,post内容将插入数据库

那么我该如何更改代码以使其正常工作呢? 谢谢

根据查询的成功/失败执行返回
true | false
。如果你想写得像

$post->categories()->attach($request->categories);
然后您需要模式
Post
并创建如下实例:

$post = new Post;
$post->title = $request->title;
// ...
$post->save();

然后您将有
Post
class

的实例,谢谢。是否有办法仅更改此$post->categories()->attach($request->categories);而不是代码的其余部分?不,没有。这不会创建类
Post
的新实例,还请注意,我的方法不需要
$data
数组。@PapT如果只想更改该部分,可以将
->insert
替换为
insertGetId
,然后执行
$Post=Post::find($Post)
进行第二次查询以再次获取模型,尽管这是非常低效的,但是为什么所有内容都被包装在
if($image){…}
?。这意味着
$post
将不会被保存,并且在某些情况下服务器将不会响应
dd($request->categories)
的输出是什么?
$post = new Post;
$post->title = $request->title;
// ...
$post->save();