我的模式如下:
客户(拥有多个账户)
账户(持有大量资产,属于客户)
控股(财产至账户)
所以,客户有很多账户有很多控股。需要注意的是,帐户的本地密钥是account_id
,而不仅仅是预期的id
。这是因为要求帐户具有字符串标识符。在持有量表中,外键也是account_id
。
我已经这样定义了我的关系:
// Client.php
public function accounts()
{
return $this->hasMany('Account');
}
// Account.php
public function client()
{
return $this->belongsTo('Client');
}
public function holdings()
{
return $this->hasMany('Holding');
}
// Holding.php
public function account()
{
return $this->belongsTo('Account', 'account_id', 'account_id');
}
如果我想查询一个给定客户ID的所有持有量,我会怎么做?如果我做了类似的事情
Client::find($id)->accounts->holdings;
我得到这个错误:
未定义的属性:Illumb\Database\Eloquent\Relations\HasMany::$holdings
我还尝试使用hasManyBy关系(将关系添加到我的模型中),但似乎只有一种方法可以定义外键,而不是帐户的本地键。有什么建议吗?
我认为您可以使用load方法为每个帐户获得相应的查询结果。比如:
Client::find($id)->load('accounts.holdings');
这意味着客户id
存在于账户中
并且持有的
也有
账户id
。
附言:我不太确定在这种情况下这将如何工作。但我希望这能引导你找到做这件事的方法。
您需要更改帐户模型中的关系
// Account.php
public function client()
{
return $this->belongsTo('Client','account_id');
}
但是,更合适的做法是将client_id
表中的列名更改为
假设您在accounts表上有客户id
,
这样做:
// Account model
public function holdings()
{
return $this->hasMany('Holding', 'account_id', 'account_id');
}
// then
$client = Client::with('accounts.holdings')->find($id);
$client->accounts // collection
->first() // or process the collecction in the loop
->holdings; // holdlings collection
只有当帐户模型有(或将要为此目的有)$初级密钥设置为account_id
而不是默认的id时,HasManyPass才会工作
因为account_id
不是帐户
模型的主键,所以不能使用hasManyBy
。所以我建议你这样做:
$accountIds = $client->accounts()->lists('account_id');
// if it was many-to-many you would need select clause as well:
// $accountIds = $client->accounts()->select('accounts.account_id')->lists('account_id');
$holdings = Holding::whereIn('account_id', $accountIds)->get();
通过这种方式,您可以像您所希望的那样获得集合,与即时加载相比,donwside还需要1个查询。
问题内容: 我遇到以下错误,并且有点卡住:线程“ main”中的异常 我被困住了,因为我找到的所有答案都涉及通常包含在android SDK中的Java 密码扩展(JCE) 。所以我认为我的问题不是这个。 我一定忘记了一些东西,但是我找不到。也许我的代码是错误的(这是我使用Java进行加密的第一种方法,我不是专家,下面的代码大部分是教程的复制粘贴)。 我使用以下代码对String进行加密和解密:
问题内容: 我之前曾问过一个问题,但是没有得到正确的回答,也无济于事。 因此,我澄清了有关该问题的一些细节,我真的很想听听你关于如何解决此问题或应该尝试的想法。 我在Linux服务器上安装了Java 1.6.0.12,下面的代码运行得很完美。 今天,我在服务器用户上安装了Java 1.6.0.26,当我尝试运行应用程序时,出现以下异常。我的猜测是它与Java安装配置有关,因为它在第一个版本中有效,
我使用mysql aes加密和解密如下: 我读到AES支持128 192和256。我假设默认值是128是正确的吗?因此,鉴于上述查询没有定义密钥长度,它会以默认密钥长度加密和解密吗? 如果是这样,在上面的查询中指定密钥长度会更好吗?因为例如:假设我使用默认值128加密和存储数据,但后来设置更改,256变为默认值,那么这意味着它将无法解密数据,对吗?有没有办法在上面的查询中定义密钥长度? 另外,我用
我正在为RESTAPI建立一个Laravel项目。基本上,我将用户分为两个表,用户和管理员(模型名)。我想使用默认的Laravel身份验证框架通过web guard对管理员进行身份验证,并使用JWT(tymondesigns提供的包)通过api guard对用户进行身份验证。一切都很顺利。我配置了软件包,在app/auth.php中设置了防护和提供者,并使其几乎正常工作。 我现在可以通过Auth
密码\u默认值和密码\u BCRYPT之间有什么区别?他们都使用河豚加密算法吗?算法的成本是多少?如何在PHP中设置密码\u散列生成255个散列长度而不是60个?
我正在尝试加密laravel默认加密中的json编码字符串。但我不确定它使用的是AES-256-CBC。这背后的原因是,我还在尝试从AES自定义类进行相同的加密。 我所做的。 > json_编码数组 在AES自定义类中设置密钥、模式和块大小并生成令牌。 加密令牌。 使用setData设置加密令牌 使用AES自定义类解密 结果与我在步骤1中的结果相同。当我尝试加密(Crypt::encrypt($R