Php Laravel插入和检索关系

Php Laravel插入和检索关系,php,orm,laravel,relationship,eloquent,Php,Orm,Laravel,Relationship,Eloquent,我正在做一个基于Laravel3的项目,我想看看是否可以缩短处理关系的代码(做以下事情的更好方法) 用户控制器 创建用户功能 .... $table->integer('organization_id')->unsigned()->nullable(); $table->foreign('organization_id')->references('id')->on('organizations'); $table->integer('school_i

我正在做一个基于Laravel3的项目,我想看看是否可以缩短处理关系的代码(做以下事情的更好方法)

用户控制器 创建用户功能

....
$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();
....
创建或检索学校/组织id


模型 用户模型

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');
    }

}
组织/学校模式

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();
....
组织/学校迁移

....
$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()
    操作不会检索
    学校的任何数据,仅:

    [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
            (
            )
    
    )
    
    有没有比上面使用的更好的方法来生成
    用户->学校/组织
    关系?如果是,怎么做

    雄辩应该能够自动处理,请参见此处:

    检索用户学校/组织名称的更好方法是:
    School::find($schoolId)->get()

    如果您的意思是无法检索关系信息:
    具有\u name
    并且
    属于\u
    返回一个易懂的表达式,您仍然需要对它们调用
    get()
    ,以检索所需的对象或集合

    我处理这个问题的方法是为关系添加一个参数,以确定该方法是否应返回表达式或结果:

    $table->increments('id');
    $table->string('name');
    $table->string('slug');
    $table->integer('count')->default(1)->unsigned();
    $table->unique('name');
    
    ...
    
    class User extends Eloquent
    {
        /**
         * Return an Elloquent Expression or a collection (or object)
         * Defaults to return a collection
         */
        public function organization ($as_expression=FALSE) {
            $related = $this->belongs_to('Organization');
            return $as_expression ? $related : $related->get();
        }
    
        public function school ($as_expression=FALSE) {
            $related = $this->belongs_to('School');
            return $as_expression ? $related : $related->get();
        }
    
        ...
    
        public function create ($user_data=array()) {
            $newUser = new User;
            $activity = @$user_data['organization'] ?
                'organization' : (@$user_data['school'] ? 'school' : '');
    
            switch ($activity) {
                case 'organization':
                case 'school':
                    /**
                     * Call the corresponding method, return as Eloquent Expression
                     * Use a string to be verbose, TRUE does fine if wanted
                     */
                    $new_user->{$activity}('as_expression')->save(array( 'name' => $user_data[$activity]));
    
                    break;
                default:
                    break;
            }
    
            return $new_user;
        }
    }
    
    ...
    
    class Organization extends Eloquent
    {
        public function user ($as_expression=FALSE) {
            $related = $this->has_many('User');
            return $as_expression ? $related : $related->get();
        }
    }
    

    问题是,目前还没有自动完成功能,因此任何输入都是新输入,没有组织的现有ID唯一名称。因此,组织也必须插入我,并与用户相关有趣,我会尽快尝试,并让您知道