User
和Address
是一对一的关系。
addresses
表格包含user_id
字段,可将其与用户关联。
可以按如下方式插入数据:
$user = App\User::find($id);
$address = new Address(['name'=>'221B Baker Street']);
$user->address()->save($address);
此处,将addresses
表中列名称的关联数组传递给Address()
构造函数。但是在Address.php模型中,没有为此定义构造函数。 laravel如何处理这个?
如果我们以对象方式执行,如下所示:
这些的setter
和getter
方法在哪里?
$user = App\User::find($id);
$address = new Address();
$address->name = '221B Baker Street';
$user->address()->save($address);
这是一种数据抽象形式吗?
答案 0 :(得分:1)
每个模型都扩展Model.php
vendor/laravel/framework/src/Illuminate/Database/Eloquent
__get()
,其中包含魔术方法__set()
和fill()
。这是框架在使用对象方式时动态设置属性的方式。
对于赋予构造函数的数组,在抽象Model类中有方法- (void)logReachability:(Reachability *)reachability {
NSString *whichReachabilityString = nil;
if (reachability == self.hostReachability) {
whichReachabilityString = @"www.apple.com";
NSLog(@" 1");
} else if (reachability == self.internetReachability) {
whichReachabilityString = @"The Internet";
NSLog(@" 2");
} else if (reachability == self.wifiReachability) {
whichReachabilityString = @"Local Wi-Fi";
NSLog(@" 3");
}
NSString *howReachableString = nil;
switch (reachability.currentReachabilityStatus) {
case NotReachable: {
howReachableString = @"not reachable";
break;
}
case ReachableViaWWAN: {
howReachableString = @"reachable by cellular data";
break;
}
case ReachableViaWiFi: {
howReachableString = @"reachable by Wi-Fi";
break;
}
}
NSLog(@" Reachable Via :%@ ", howReachableString);
}
,它从构造函数中调用,这样模型就可以从构造函数中获得水分。