Php 设定外部数据种子:在null上调用成员函数save()

Php 设定外部数据种子:在null上调用成员函数save(),php,laravel,Php,Laravel,我正试图在一个用户有很多文章的地方建立一个带有外键的模型。 我做了两个模型,两个工厂和一个播种机。将articles表作为一个用户id列 文章模式 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $fillable = [ 'title', 'body', 'user_id'

我正试图在一个用户有很多文章的地方建立一个带有外键的模型。 我做了两个模型,两个工厂和一个播种机。将articles表作为一个用户id列

文章模式

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model
{
    protected $fillable = [
        'title',
        'body',
        'user_id'
    ];

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


我搞不清楚什么是pro,错误是我忘了给模型用户和文章函数添加一个返回。

错误是我忘了给模型用户和文章函数添加一个返回。

它告诉你,
$user->articles()
正在返回
null
。也许你需要在给你的用户添加种子之前为你的文章添加种子?如果你的文章为0,会发生什么?你得到空值。请尝试将您的rand更改为1-10。@geoidesic我遵循了laravel上的种子文档,我只是将rand添加到其中。@Styphon我更改了它,但什么也没有发生,我仍然得到相同的问题,就像这样…>create()->each(函数($user)不带\App\UserIt告诉您,
$user->articles()
正在返回
null
。在为用户添加种子之前,您可能需要为文章添加种子?如果您制作了0篇文章,会发生什么?您会得到null。请尝试将您的rand更改为1-10。@geoidesic我按照laravel上的种子文档进行了操作,我只是将rand添加到其中。@Styphon我更改了它,但没有发生任何事情,我仍然得到相同的结果按此操作…>create()->不带\App\users的每个(函数($user)都可以,是的!可以,是的!
<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    public function articles()
    {
        $this->hasMany(Article::class);
    }
}

<?php

use Faker\Generator as Faker;

$factory->define(App\Article::class, function (Faker $faker) {
    return [
        'title' => $faker->text(),
        'body' => $faker->text(10000),
    ];
});

<?php

use Faker\Generator as Faker;

$factory->define(App\User::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'email_verified_at' => now(),
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
    ];
});

<?php

use Illuminate\Database\Seeder;
use \Illuminate\Support\Facades\DB;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        factory(App\User::class, 500)->create()->each(function (\App\User $user) {
            $user->articles()->save(factory(\App\Article::class, rand(0, 10))->make());
        });
    }
}

Seeding: UsersTableSeeder

   Symfony\Component\Debug\Exception\FatalThrowableError  : Call to a member function save() on null

  at D:\Media\Documents\Projets\laravel.lcoletta-blog\database\seeds\UsersTableSeeder.php:16
    12|      */
    13|     public function run()
    14|     {
    15|         factory(App\User::class, 500)->create()->each(function (\App\User $user) {
  > 16|             $user->articles()->save(factory(\App\Article::class, rand(0, 10))->make());
    17|         });
    18|     }
    19| }
    20| 

  Exception trace:

  1   UsersTableSeeder::{closure}(Object(App\User))
      D:\Media\Documents\Projets\laravel.lcoletta-blog\vendor\laravel\framework\src\Illuminate\Support\Collection.php:418

  2   Illuminate\Support\Collection::each(Object(Closure))
      D:\Media\Documents\Projets\laravel.lcoletta-blog\database\seeds\UsersTableSeeder.php:17

  Please use the argument -v to see more details.