我为我的Laravel应用程序创建了一个简单的友谊关系,这一切都运行正常,直到我注意到当我查询用户的友情时,它只搜索Dim n1 As Double
Dim n2 As Double
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
n1 = Cells(2, 8).Value
n2 = Cells(2, 3).Value
Do While n1 <> 0
n2 = n2 + (n1 * -1)
Cells(2, 3).Value = n2
n1 = Cells(2, 8).Value
Loop
End Sub
字段上的当前用户。
由于友谊本质上是一种双向关系,我试图在laravel模型中找到一种通过多列检索所有友谊关系的方法。
UID1
public function friends()
{
return $this->belongsToMany( App\Modules\Users\Models\User::class ,'friends', 'uid1');
}
public function friends()
{
$a = $this->belongsToMany( App\Modules\Users\Models\User::class ,'users_friends', 'uid1');
$b = $this->belongsToMany( App\Modules\Users\Models\User::class ,'users_friends', 'uid2');
return combine($a,$b);
}
如果当前UserID = 1,则当前实现将仅返回其中一条记录,这是根据以下朋友表中的数据。
+----------------------+
| users table |
+----------------------+
+----| id: primary UserID |
| | fname: string |
| +----------------------+
|
|
| +----------------------+
| | friends table |
| +----------------------+
| | id: primary iD |
| | |
+----| uid1: user_id |
| | |
+----| uid2: user_id |
+----------------------+
+-------------------------------+
| friends table (data) |
+--------|---------|------------+
| id | uid1 | uid2 |
+--------|---------|------------+
| 1 | 1 | 7 |
| 2 | 7 | 1 |
| 3 | 9 | 1 |
+-------------------------------+
我有一个我创建的FriendShip助手类,它做了类似的事情,但是在这个函数中我明确地传递了UserID
<?php
namespace App\Modules\Users\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $table = 'users';
protected $fillable = [
'username', 'email', 'password', .... .
];
public function friends()
{
return $this->belongsToMany( App\Modules\Users\Models\User::class ,'users_friends', 'uid1');
}
答案 0 :(得分:0)
您可以通过简单地链接来声明关系时添加其他条件。
"="
但请记住,eloquent并未将括号中的第一个关系条件分组,因此您可能会以某些情况下无法正常工作的SQL结束(如果使用或,和应该没问题)
例如,上面的内容可能会导致SQL看起来像这样
<?php
//...
class User extends Model {
//...
public function friends() {
return $this->hasMany(/*...*/)->orWhere('uid2', $this->id);
}
//...
这是一个正确的SQL语句,但如果没有分组,您将无法获得您期望的结果。
另一种方法是使用accessor和两个单独的关系
SELECT * FROM users_friends WHERE uid1 = ? AND uid1 IS NOT NULL OR uid2 = ?
但是这样你就可以两次单独前往DB。