我正在尝试自动生成多个条目,每个星期一早上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行之外的任何内容都是异常的错误消息。
我现在不知所措。
请帮助
答案 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()语句看起来很疯狂。在这样的情况下,如果错误消息没有提供信息,我会在代码中的连续点添加有针对性的echo
,var_dump()
和dd()
语句,以便您查明错误的位置正在发生。例如作为foreach循环中的第一行,您应该插入echo 'now in foreach loop';
然后在下一行之后执行dd($current_week)
并查看它给您的内容。
注意@Rami也完全正确 - 访问您不使用()
的属性,该语法是访问方法或查询构建器对象。该错误看起来像是尝试访问不存在的查询构建器对象,因为code
是属性。