Laravel Eloquent Models __construct调用关系的方法

时间:2017-10-29 12:05:24

标签: laravel-eloquent laravel-5.5

我希望我的模型在实例化时自动调用它的关系。截至目前,我的模型看起来像这样:

class AdminLog extends Model{
    public function __construct(){
        $this->belongsTo('App\User', 'admin_id');
    }
}

但是当我尝试dd(AdminLog::get()->first());时,它并没有表现出任何关系。

编辑#1:尝试在模型的parent::__construct();方法中添加__construct,但它不起作用。

1 个答案:

答案 0 :(得分:2)

load 定义关系,它不会加载它。

首先,您需要定义关系,然后可以使用class AdminLog extends Model { public function user() { return $this->belongsTo(\App\User::class, 'admin_id'); } } $log = AdminLog::first(); $log->load('user'); 方法在任何时候加载它。

AdminLog

可以在构造函数内部加载,但我强烈建议不要这样做。如果您有20个$logs = AdminLog::take(20) ->with('user') ->get(); dd($logs->toArray()); 个对象,那么它将查询数据库20次,每个对象一次。效率低下。

您应该做的是使用multi-line。对于所有20个管理日志,这将仅查询用户表一次。有很多方法可以做到这一点,这是一个例子:

# Generate your data set
df <- data.frame(user_id =c(1,2,3,4),
                 q1 = c(5,4,2,5),
                 q2 = c(5,3,2,4),
                 q3 = c(5,5,2, NA),
                 q4 = c(5,6,2,4))

# populate the vector with a loop
test <- character(0)
for(i in 1:nrow(df)){
# check if the sum of the values is equal to the sum of the last value 
# repeated. This can only be true if all values are the same
  if(sum(df[i,2:5], na.rm = TRUE) - sum(rep(df[i,5],4)) == 0){
    test[i] <- "equal"
  } else{
    test[i] <- "not_equal"
  }

}

# finally attach the vector as a column to your data frame
df$test <- test