Laravel使用计划每周为多个用户创建条目

时间:2018-03-26 08:15:01

标签: laravel cron schedule

我正在尝试自动生成多个条目,每个星期一早上07:00为每个用户创建一个条目。

此外,它还需要检查条目是否存在,因为用户可以根据需要创建条目,我已经使用Requests timesheetRequest.php验证手动创建

控制台/命令/ AddSheets.php

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Models\User;
use Carbon\Carbon;
use DB;

class AddSheets extends Command
{
protected $signature = 'add:sheets';

protected $description = 'Generate new timesheet for all active users';

public function handle()
{
    /**
     * get users where active
     * if does not exist, create a new timesheet for each user for current week 2018-11 W/C 24-03 MS
     */
    $users = User::with('profile')->where('status_id', '1')->get();
    foreach ($users as $user) {
        $currentweek = Carbon::now()
            ->year . '-' . Carbon::now('w')
            ->weekOfYear . ' W/C ' . Carbon::now()
            ->day . '-' . Carbon::now()
            ->month . ' ' . $user->profile->code();
        DB::table('timesheets')->insert([
            'name' => $currentweek,
            'status_id' => 1,
            'user_id' => $user->id
        ]);
    }
    $this->info('Add:Sheets Command Run successfully!');
}
}

Kernel.php

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Models\User;
use Carbon\Carbon;
use DB;

class Kernel extends ConsoleKernel
{

protected $commands = [
    Commands\AddSheets::class
];

protected function schedule(Schedule $schedule)
{
    $schedule->command('add:sheets')->weekly()->mondays('07:00');
}

protected function commands()
{
    require base_path('routes/console.php');
}
}

当我跑步时

php artisan add:sheets

我得到了

In Builder.php line 2445:

Call to undefined method Illuminate\Database\Query\Builder::code()

但我不确定这意味着什么,并且在源代码中看不到任何内容,除了第2445行之外的任何内容都是异常的错误消息。

我现在不知所措。

请帮助

2 个答案:

答案 0 :(得分:0)

更新此变量声明:

$currentweek = Carbon::now()
    ->year . '-' . Carbon::now('w')
    ->weekOfYear . ' W/C ' . Carbon::now()
    ->day . '-' . Carbon::now()
    ->month . ' ' . $user->profile->code(); // Here

$currentweek = Carbon::now()->format("y-W \W/C d-m") . ' ' . $user->profile->code();

您遇到的错误是因为您尝试使用code()模型的profile方法并且它不存在,请确保您在正确的对象上使用了所述方法,如果您尝试访问某个媒体资源,请使用$user->profile->code代替:

$currentweek = Carbon::now()->format("y-W \W/C d-m") . ' ' . $user->profile->code;

希望这会对你有所帮助。

答案 1 :(得分:0)

我同意@Asur你$current_week中的Carbon :: now()语句看起来很疯狂。在这样的情况下,如果错误消息没有提供信息,我会在代码中的连续点添加有针对性的echovar_dump()dd()语句,以便您查明错误的位置正在发生。例如作为foreach循环中的第一行,您应该插入echo 'now in foreach loop';然后在下一行之后执行dd($current_week)并查看它给您的内容。

注意@Rami也完全正确 - 访问您不使用()的属性,该语法是访问方法或查询构建器对象。该错误看起来像是尝试访问不存在的查询构建器对象,因为code是属性。