我希望我的模型在实例化时自动调用它的关系。截至目前,我的模型看起来像这样:
class AdminLog extends Model{
public function __construct(){
$this->belongsTo('App\User', 'admin_id');
}
}
但是当我尝试dd(AdminLog::get()->first());
时,它并没有表现出任何关系。
编辑#1:尝试在模型的parent::__construct();
方法中添加__construct
,但它不起作用。
答案 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