Php 设定外部数据种子:在null上调用成员函数save()
我正试图在一个用户有很多文章的地方建立一个带有外键的模型。 我做了两个模型,两个工厂和一个播种机。将articles表作为一个用户id列 文章模式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'
<?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.