【问题标题】:Use Faker in October CMS在十月 CMS 中使用 Faker
【发布时间】:2019-04-01 23:53:13
【问题描述】:

我在十月 CMS 中创建服务插件。我有 2 个转发器字段(包裹、邮递员)。我使用 Faker Plugin 在数据库中插入虚拟数据但出现错误

为 foreach() 提供的参数无效

这是我的种子代码

<?php namespace Sepehr\Service\Updates;

use Sepehr\Service\Models\Service;
use Faker;
use October\Rain\Database\Updates\Seeder;

class SeedAllTable extends Seeder
{

    public function run()
    {
        $faker = Faker\Factory::create();
        $service = new Service();

        $service->user_id = 1;
        $service->manager_id = 1;
        $service->sender_postal_code = $faker->postcode();
        $service->sender_address = $faker->address();
        $service->status_id = $faker->numberBetween(1, 6);

        foreach ($service->packages as $package) {
            $package['receiver_postal_code'] = $faker->postcode();
            $package['receiver_address'] = $faker->address();
            $package['weight_id'] = $faker->numberBetween(1, 3);
            $package['post_type_id'] = $faker->numberBetween(1, 3);
            $package['distribution_time_id'] = $faker->numberBetween(1, 3);
            $package['special_services_id'] = $faker->numberBetween(1, 3);
            $package['price'] = 0;
            $package['package_type_id'] = $faker->numberBetween(1, 3);
            $package['insurance_type_id'] = $faker->numberBetween(1, 3);
        }
        $service->save();

【问题讨论】:

  • 你好,repeater字段一般都是以Jsonable格式保存数据的,所以你可以尝试将数组转成JSON,这样就可以保存repeater字段数据了。
  • 谢谢,我尝试了,但是 service->save() 不工作我在另一个没有中继器的插件中测试并且 service->save() 不工作
  • 您正在为 $service-&gt;packages 之类的包使用 foreach 循环,这不起作用,因为您要创建服务,$service-&gt;packages 当服务已经存在并且它将包含包时,这将起作用。跨度>
  • @ChiragPatel 你可以给我一个示例代码吗?

标签: octobercms octobercms-plugins octobercms-backend


【解决方案1】:

这不是假货什么的问题。

问题是service是新记录,packages第一次是空白,所以模型不知道它的定义/模式所以你需要将它分配为数组,然后它会自动转换为json

class User extends Model
{
   // make sure your field is jsonable
   protected $jsonable = ['packages'];

现在换包替换

$service->status_id = $faker->numberBetween(1, 6);

foreach ($service->packages as $package) {
    $package['receiver_postal_code'] = $faker->postcode();
    $package['receiver_address'] = $faker->address();
    $package['weight_id'] = $faker->numberBetween(1, 3);
    $package['post_type_id'] = $faker->numberBetween(1, 3);
    $package['distribution_time_id'] = $faker->numberBetween(1, 3);
    $package['special_services_id'] = $faker->numberBetween(1, 3);
    $package['price'] = 0;
    $package['package_type_id'] = $faker->numberBetween(1, 3);
    $package['insurance_type_id'] = $faker->numberBetween(1, 3);
}
$service->save();

// ...

$service->status_id = $faker->numberBetween(1, 6);

$packages = [];
$howManyPackges = 3;
while($howManyPackges > 0)
    $package = [];
    $package['receiver_postal_code'] = $faker->postcode();
    $package['receiver_address'] = $faker->address();
    $package['weight_id'] = $faker->numberBetween(1, 3);
    $package['post_type_id'] = $faker->numberBetween(1, 3);
    $package['distribution_time_id'] = $faker->numberBetween(1, 3);
    $package['special_services_id'] = $faker->numberBetween(1, 3);
    $package['price'] = 0;
    $package['package_type_id'] = $faker->numberBetween(1, 3);
    $package['insurance_type_id'] = $faker->numberBetween(1, 3);
    $packages[] = $package;
    $howManyPackges--;
}
$service->packages = $packages;

$service->save();

// ...

它将为转发器packages添加3条记录

它应该添加包数组,jsonable 会将其转换为json

如有任何疑问,请发表评论。

【讨论】:

  • 谢谢,但我的包裹是服务中的中继器字段。它不是一个单独的模型
  • Hi Hardik 错误再次发生 :( 为 foreach() 提供的参数无效
  • 我不确定有没有 foreach 循环,我更新了答案,使用该代码删除了你的 foreach 循环,我现在添加了指令希望它有帮助
猜你喜欢
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多