Laravel Digging Deeper - fantasy0107/notes GitHub Wiki

Collection

方便對 array 進行操作

使用

$collection = collect([1, 2, 3]);

相關可以用 collection 方法

  1. 關聯 hasMany回傳
  2. Eloquent get()

好用的方法

Available methods

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

Laravel Task Scheduling 設定


//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();

Schedule Frequency Options 頻率

關掉

ps -fe | grep artisan

刪掉前兩個