2016-10-20 18 views
1

私はかなり新しいlaravelです。ユーザーをデータベースに追加します。私はそうするときには、次のエラーが来る:引数1はIlluminate Database Eloquent Relations HasOneOrMany :: save()に渡されなければなりませんIlluminate Database Eloquent Model

Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() 
must be an 
instance of Illuminate\Database\Eloquent\Model, string given, 
called in C:\xampp\htdocs\lar\app\Http\Controllers\PostController.php on line  
25 and defined 

Userモデル:

<?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') ; 
} 
} 

のPostController:

<?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' => '[email protected]', 
    'as'=>'post.create' 
    ]); 

フォームアクション:

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

この問題を解決するためにどのように..この問題を解決otの方法を教えてください?

<?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'); 
} 
} 

あなたはsaveメソッドにオブジェクトとして$postオブジェクトを渡す必要があります: は事前にありがとうございます。.. :)

答えて

2

私が何をしたいことはこれだと思います。あなたはこれをやっていました:$user->posts()->save($post)。これを行う必要があるときは$user->posts()->save('$post')です。

希望します。

+0

ありがとう、私は試してみましたが、別のエラーが来ました:Connection.phpの行の761: 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))を返します。 –

+0

私はデフォルト値を追加しました:$ table-> text( 'body') - > default( "");しかし、それは動作しませんでした。 私は間違ったことを理解していません... –

+0

ああ、今すぐ取得しますが、updated_atとcreated_atはtimestamps()によって自動的に作成されますが、なぜデフォルト値が必要ですか?どのように提供するのですか? –

関連する問題