Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建父项时创建模型(例如,创建用户时创建5篇文章)_Php_Laravel_Laravel 5 - Fatal编程技术网

Php 创建父项时创建模型(例如,创建用户时创建5篇文章)

Php 创建父项时创建模型(例如,创建用户时创建5篇文章),php,laravel,laravel-5,Php,Laravel,Laravel 5,如果一个用户有许多帖子,而一篇帖子属于该用户,那么很容易做到: $factory->define(App\Post::class, function ($faker) { return [ 'title' => $faker->title, 'content' => $faker->paragraph, 'user_id' => function () { // Creates

如果一个用户有许多帖子,而一篇帖子属于该用户,那么很容易做到:

$factory->define(App\Post::class, function ($faker) {
    return [
        'title' => $faker->title,
        'content' => $faker->paragraph,
        'user_id' => function () {

            // Creates a User for every Post
            return factory(App\User::class)->create()->id;
        }
    ];
});
我如何实现相反的目标?而是在创建用户时创建5篇文章,并将该文章与新创建的用户关联

~z~编辑 我使用的是laravel 5.2,我已经在模型中声明了我的模型关系,因此我现在有:

$user = factory(App\User::class)->create();
$posts = factory(App\Post::class, 3)->make();
$user->posts()->saveMany($posts);

// Great, now I have a User and 3 Posts associated with that user. 


// However, now, I want let's say, 5 votes per post.
// I can't call $posts->votes(), so I iterate

foreach ($posts as $post) { 
    $votes = factory(App\Votes::class, 5)->make();
    $post->votes()->saveMany($votes);
}
然后,任何其他与投票等的关系都将嵌套在foreach中

$factory->define(App\User::class, function ($faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email
    ];
});

$factory->define(App\Post::class, function ($faker) {
    return [
        'title' => $faker->title,
        'content' => $faker->paragraph
    ];
});


$user = factory(User::class)->create();

$post = factory(User::class)->create();
$user->posts()->associate($post)

$posts

$posts = factory(App\Post::class, 3)->make();
$user->posts()->saveMany($posts);
$user->posts()->associate($post)

$posts

$posts = factory(App\Post::class, 3)->make();
$user->posts()->saveMany($posts);

我会使用模型事件。在您的
AppServiceProvider
中,添加以下事件:

namespace App\Providers;

use App\User;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        User::created(function ($user) {
            $posts = factory(App\Post::class, 3)->make();
            $user->posts()->saveMany($posts);
        });

        Post::created(function ($post){
            $votes = factory(App\Vote::class, 3)->make();
            $post->votes()->saveMany($votes);
        });
    }

现在,您不必担心自动创建,而且,这也不应该是控制器逻辑的一部分。

我将使用模型事件。在您的
AppServiceProvider
中,添加以下事件:

namespace App\Providers;

use App\User;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        User::created(function ($user) {
            $posts = factory(App\Post::class, 3)->make();
            $user->posts()->saveMany($posts);
        });

        Post::created(function ($post){
            $votes = factory(App\Vote::class, 3)->make();
            $post->votes()->saveMany($votes);
        });
    }

现在,您不必担心自动创建,而且,无论如何,这不应该是控制器逻辑的一部分。

目前我正在做类似的事情,但我的问题是我有几个关系,所以它变得非常混乱。我有没有办法在ModelFactory中实现这一点,或者有没有一种很好的方法来嵌套这些东西?例如:一个组有#个用户,用户有#个帖子,帖子有#个评论,等等。不要将所有内容嵌套在一个查询中,而是使用我建议的方法。您可以为每个模型类型创建不同的方法,并使用
SaveMany
save
方法与用户关联关系。即使是你提到的那个也很混乱,所以助理似乎不是一个函数,但我已经把我对你建议的理解放在了我问题的底部。这就是你想要的吗?谢谢你可以用
save
来代替它。目前我正在做类似的事情——但我的问题是我有好几段感情,所以会变得很混乱。我有没有办法在ModelFactory中实现这一点,或者有没有一种很好的方法来嵌套这些东西?例如:一个组有#个用户,用户有#个帖子,帖子有#个评论,等等。不要将所有内容嵌套在一个查询中,而是使用我建议的方法。您可以为每个模型类型创建不同的方法,并使用
SaveMany
save
方法与用户关联关系。即使是你提到的那个也很混乱,所以助理似乎不是一个函数,但我已经把我对你建议的理解放在了我问题的底部。这就是你想要的吗?谢谢您可以使用
save
来代替该选项。