私はLaravel 3で構築されたプロジェクトに取り組んでおり、関係を操作するためのコードを短縮できるかどうかを確認しようとしています(次のより良い方法)
ユーザーコントローラー
ユーザー関数を作成する
$newUser = new User;
if($userData['organization'])
$newUser->organization = self::_professional('Organization', $newUser, $userData);
else
$newUser->school = self::_professional('School', $newUser ,$userData);
学校/組織 ID の作成または取得
private function _professional($type, $newUser, $userData)
{
if ( $orgId = $type::where('name', '=', $userData[strtolower($type)])->only('id'))
return $orgId;
else
{
try {
$org = $type::create(array('name' => $userData[strtolower($type)]));
return $org->attributes['id'];
} catch( Exception $e ) {
dd($e);
}
}
}
モデル
ユーザーモデル
class User extends Eloquent {
public function organization()
{
return $this->belongs_to('Organization');
}
public function school()
{
return $this->belongs_to('School');
}
}
組織・学校モデル
class Organization extends Eloquent {
public function user()
{
return $this->has_many('User');
}
}
移行
ユーザーの移行
....
$table->integer('organization_id')->unsigned()->nullable();
$table->foreign('organization_id')->references('id')->on('organizations');
$table->integer('school_id')->unsigned()->nullable();
$table->foreign('school_id')->references('id')->on('schools');
....
組織/学校の移行
....
$table->increments('id');
$table->string('name');
$table->string('slug');
$table->integer('count')->default(1)->unsigned();
....
さて、私の質問は次のとおりです。
ユーザー - >学校/組織の関係を生成するより良い方法はありますか? もしそうなら、どのように?
ユーザーの学校/組織名を取得するより良い方法は次のとおりです。
School::find($schoolId)->get()
を実行してUser::find(1)->school()
も のデータは取得されませんschool
。
[base:protected] => User Object
(
[attributes] => Array
(
[id] => 1
[nickname] => w0rldart
....
[organization_id] =>
[school_id] => 1
...
)
[relationships] => Array
(
)
[exists] => 1
[includes] => Array
(
)
)
[model] => School Object
(
[attributes] => Array
(
)
[original] => Array
(
)
[relationships] => Array
(
)
[exists] =>
[includes] => Array
(
)
)