【问题标题】:Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model传递给 Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() 的参数 1 必须是 Illuminate\Database\Eloquent\Model 的实例
【发布时间】:2018-07-23 06:52:53
【问题描述】:

我对 Laravel 很陌生,我正在尝试将用户创建的帖子添加到数据库中。但是当我这样做时,会出现以下错误:

参数 1 传递给 Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() 必须是一个 Illuminate\Database\Eloquent\Model 的实例,给出的字符串, 在线调用 C:\xampp\htdocs\lar\app\Http\Controllers\PostController.php
25 和定义

用户模型:

<?php

namespace App;

use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;

class User extends Model implements Authenticatable
{
    use \Illuminate\Auth\Authenticatable;

    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}

帖子模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function user()
    {
        return $this->belongsTo('App\User') ;
    }
}

后控制器:

<?php

namespace App\Http\Controllers;

use App\Post;
use Illuminate\Http\Request;

class postController extends Controller
{
    public function postCreatePost(Request $request){
        // Validation
        $post = new Post();
        $post->$request['body'];
        $request->user()->posts()->save('$post');
        return redirect()->route('dashboard');
    }
}

发布路线:

Route::post('/createpost',[
    'uses' => 'PostController@postCreatePost',
    'as'=>'post.create'
]);

表单动作:

<form action="{{route('post.create')}}" method="post">

请告诉我如何解决这个问题。如何解决这个问题? 提前谢谢你.. :)

【问题讨论】:

    标签: laravel-5.2


    【解决方案1】:

    我想你想要的是这样的:

    <?php
    
    namespace App\Http\Controllers;
    
    use App\Post;
    use Illuminate\Http\Request;
    
    class postController extends Controller
    {
        public function postCreatePost(Request $request){
            // Validation
            $post = new Post();
    
            // here you set the body of the post like that
            $post->body = $request->body;
    
            // here you pass the $post object not as string
            $request->user()->posts()->save($post);
            return redirect()->route('dashboard');
        }
    }
    

    您需要将$post 对象作为对象传递给save 方法。你正在这样做:$user-&gt;posts()-&gt;save('$post') 当你需要这样做时:$user-&gt;posts()-&gt;save($post)

    希望对你有帮助。

    【讨论】:

    • 谢谢 我试过了,但又出现了另一个错误:Connection.php 第 761 行中的 QueryException:SQLSTATE[HY000]:一般错误:1364 字段 'body' 没有默认值(SQL : 插入posts (user_id, updated_at, created_at) 值 (8, 2016-10-20 10:04:19, 2016-10-20 10:04:19))。
    • 我添加了默认值 :$table->text('body')->default(" "); ,但它没有用。我不明白我做错了什么......
    • 哦,现在我明白了……但是updated_at和created_at是由timestamps()自动创建的,那为什么需要一个默认值呢?以及如何提供?
    • 你改行$post-&gt;body = $request-&gt;body;了吗?不知何故,你的身体没有被固定。是的,Laravel 会自动更新你的时间戳。如果您不想这样,只需在模型中设置 public $timestamps = false;
    • 哦,是的,我忘记了。非常感谢:),但我不明白。为什么不坐?知道的可以告诉我吗?
    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 2020-11-17
    • 2020-02-06
    • 2019-03-04
    • 2020-02-23
    • 2017-12-17
    • 2020-11-26
    • 2021-04-20
    相关资源
    最近更新 更多