Laravel Digging Deeper - fantasy0107/notes GitHub Wiki
Collection
方便對 array 進行操作
使用
$collection = collect([1, 2, 3]);
相關可以用 collection 方法
- 關聯 hasMany回傳
- Eloquent get()
好用的方法
max - item 最大值
each - 瀏覽整個 collection 的 item
return true => continue
return false => break
$collection = $collection->each(function ($item, $key) {
//
});
map - 瀏覽整個 collection 的 item 產生新的 collection
first - 回傳第一個 item
firstWhere - 回傳第一個符合條件的 item
groupBy - 根據 key 去分類 item
last - 最後一個 item
pluck - 取的某個 key 的 collection
pop - 拿出最後一個 item
push - 新增 item 到 collection 的尾巴
sortBy - 排序 collection 根據 key ASC
sortByDesc - 排序 collection 根據 key DESC
unique - 回傳所有 unique 的 item
$unique = $collection->unique('brand');
values - 重新排序 collection 的 key
$values = $collection->values();
where - 像 sql 的 where 一樣
$filtered = $collection->where('price', 100);
whereIn - 當 key 為某個數值時拿出相關的 item
$filtered = $collection->whereIn('price', [150, 200]);
concat - 增加 array 或 collection 到指定的 collection 尾巴
$concatenated = $collection->concat(['Jane Doe'])->concat(['name' => 'Johnny Doe']);
contains - 有沒有存在值在 collection array 裡面
$collection->contains('key', 'value');
has - 有沒有這個collection 的 key
$collection->has('product');
Artisan Console
註冊command - 所有在 app/Console/Commands 底下的都會被自動註冊
# 指令儲存路徑
app/Console/Commands
# 建立指令
php artisan make:command SendEmails
# 指令結構
1. signature 輸入指令的方式 (顯示在 php artisan)
2. description 指令描述 (顯示在 php artisan)
3. handle 則是當你執行指令時做的事情
## 定義輸入
可能會需要 arguments 或 options
## arguments
protected $signature = 'email:send {user}';
### Optional argument...
email:send {user?}
### Optional argument with default value...
email:send {user=foo}
### options
protected $signature = 'email:send {user} {--queue}';
### Options With Values
protected $signature = 'email:send {user} {--queue=}';
### default
email:send {user} {--queue=default}
### 取得輸入
$userId = $this->argument('user');
//取得 arguments Array
$arguments = $this->arguments();
//特定 option
$queueName = $this->option('queue');
//全部option
$options = $this->options();
# 詢問
## 一般
$name = $this->ask('What is your name?');
# 輸出錯誤
$this->error('Something went wrong!');
## 會隱藏輸入
$password = $this->secret('What is the password?');
# 輸出訊息到 console 畫面
$this->info('Display this on the screen'); // green
$this->error('Something went wrong!'); // red
$this->line('Display this on the screen'); // uncolored
# 進度條 Progress Bars
$users = App\User::all();
$bar = $this->output->createProgressBar(count($users));
foreach ($users as $user) {
$this->performTask($user);
$bar->advance();
}
$bar->finish();
問題
在 command 中執行 api route
$request = Request::create('/jakeTest', 'GET');
$this->info(app()['Illuminate\Contracts\Http\Kernel']->handle($request));
Task Scheduling
設定cronjob
到你的 Linux 主機使用編輯排程指令。
crontab -e
加入設定。
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
//App\Console\Kernel
# Scheduling Artisan Commands
$schedule->command('emails:send --force')->daily();
$schedule->command(EmailsCommand::class, ['--force'])->daily();
# Scheduling Queued Jobs
$schedule->job(new Heartbeat)->everyFiveMinutes();
# Scheduling Shell Commands
$schedule->exec('node /home/forge/script.js')->daily();
ps -fe | grep artisan
刪掉前兩個