Laravel 5.2保存关系BelongsTo One To Many

时间:2016-10-20 11:14:14

标签: laravel eloquent

嗨,我有User Model喜欢这个

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'role_id',
        'email',
        'password',
        'full_name',
        'address',
        'phone',
        'family_name',
        'family_address',
        'family_phone',
        'idcard',
        'status',
        'balance',
    ];

    /**
     * The attributes excluded from the model's JSON form.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function posts(){
        return $this->hasMany(Post::class);
    }

我有Post Model喜欢这个

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = [
        'user_id',
        'title',
        'content',    
    ];

    public function user(){
        return $this->belongsTo(User::class);    
    }
}

并在我的Posts Controller

public function store(CreatePostRequest $request)
{
    $user = Auth::user();

    $post = Post::create([
        'title' => $request->title,
        'content' => $request->content,        
    ]);

    $post->user()->associate($user);

    return redirect()->route('admin.posts.index')->with('success', 'Post berhasil disimpan.');
}

我收到此错误

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`rentcar`.`posts`, CONSTRAINT `posts_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: insert into `posts` (`title`, `content`, `updated_at`, `created_at`) values (Judul, <p>Isi</p>, 2016-10-20 11:10:31, 2016-10-20 11:10:31))

我的商店方法代码有什么问题?

如果我想保存帖子并将其与当前登录的用户关联,我的代码应如何显示?

3 个答案:

答案 0 :(得分:0)

确保posts表中的外键可以为空。

$table->integer('user_id')->unsigned()->nullable();

答案 1 :(得分:0)

create方法会立即保存。

因此要么在create数组中指定user_id,要么使用

$post = new Post();
$post->title = $request->title;
$post->content = $request->content;

$post->user()->associate($user);

$post->save();

答案 2 :(得分:0)

试试这个。

public function store(CreatePostRequest $request)
{
   $user = Auth::user();

$post = Post::create([
    'title' => $request->title,
    'content' => $request->content,   
    'user_id' => $user->id;     
]);

return redirect()->route('admin.posts.index')->with('success', 'Post berhasil disimpan.');
 }