Skip to content

Instantly share code, notes, and snippets.

@tanakahisateru
Created December 26, 2014 09:21
Show Gist options
  • Save tanakahisateru/036698735ad6acc0c0ec to your computer and use it in GitHub Desktop.
Save tanakahisateru/036698735ad6acc0c0ec to your computer and use it in GitHub Desktop.
Yii2のARで求人情報には公開求人と非公開人材紹介があることを表す方法
<?php
namespace app\models;
use yii\db\ActiveRecord;
abstract class Job extends ActiveRecord
{
public static function tableName()
{
return 'job';
}
// 同じテーブルから出てきたデータがどのクラスに実体化されるかを
// 決める方法をカスタマイズできる
public static function instantiate($row)
{
// secret フラグがあるものは秘密の求人として new する
if ($row['secret'] == 1) {
return new SecretJob();
} elseif ($row['secret'] == 0) {
return new PublicJob();
} else {
throw new \RuntimeException();
}
}
public abstract function getEntryForm();
}
class PublicJob extends Job
{
public function entryToEmployer($form)
{
// 求人企業の採用担当者に直接コンタクト
}
public function getEntryForm()
{
return; // 待遇とかの詳細付きフォーム
}
}
class SecretJob extends Job
{
public function entryToAgent($form)
{
// ヘッドハントエージェントにコンタクト
}
public function getEntryForm()
{
return; // エージェントがヒアリングするので詳細なしだけどアポ確実にできるフォーム
}
}
foreach(Job::find()->limit(10)->each() as $job) {
/** @var Job $job */
$form = $job->getEntryForm(); // エントリーフォームが異なる実体だったり
// ホントに別のクラスなのでこういうのも...
if ($job instanceof SecretJob) {
$job->entryToAgent($form); // 紹介エージェントにGO
} elseif ($job instanceof PublicJob) {
$job->entryToEmployer($form); // 雇用者に直接GO
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment