php - 是否可以在 laravel 中使用 "hasMany"关联同一张表?

标签 php mysql laravel eloquent

我在使用 Laravel 创建聊天系统时有点卡在这里我创建了一个表来存储这样的消息

inbox_message
->id (PK)
->message
->sentTo
->belongsTo
->isStarred
->isRead
->isDraft
->group_message_id (FK) in the same table (inbox_messages).

现在,group_message_id 将作为引用 ID 的 FK(FK 和 PK 在同一个表中)

为了抓取,我实现了这样的hasMany关系

public function child(){
    return $this->hasMany(message::class,'group_message_id','id');
}

现在,我不是在子节点中获取所有消息,而是在子节点中获取 [] 数组,并像这样分别获取所有消息。

[
    {
        "id": 2,
        "message": "msg2 by patient6 to doctor 3",
        "belongsTo": 6,
        "sentTo": 3,
        "isStarred": 0,
        "isDraft": 0,
        "isRead": 1,
        "group_message_id": 1,
        "created_at": "2017-09-05 03:48:19",
        "updated_at": "2017-09-05 06:52:33",
        "deleted_at": null,
        "child": []
    },
    {
        "id": 4,
        "message": "msg4 by patient6 to doctor 3",
        "belongsTo": 6,
        "sentTo": 3,
        "isStarred": 0,
        "isDraft": 0,
        "isRead": 1,
        "group_message_id": 1,
        "created_at": "2017-09-05 03:54:35",
        "updated_at": "2017-09-05 06:52:33",
        "deleted_at": null,
        "child": []
    }
]

我为获取结果所做的查询

$userMsgs = message::with( [
                    'child' => function ( $query ) {
                        $query->where( 'isDraft', '!=', 1 );
                    }
                ] )->where( 'isDraft', '!=', 1 )
                                   ->where( 'sentTo', $authId )
                                   ->get();

问题是否可以在 Eloquent 情况下关联同一张表,如果是,请告诉我哪里错了?

感谢您的帮助,我非常需要 :)

最佳答案

尝试使用 self 关系

class message extends Eloquent {

   function child(){
       return $this->hasMany('message', 'group_message_id');
   }
}

希望这会有所帮助。

关于php - 是否可以在 laravel 中使用 "hasMany"关联同一张表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46054152/

相关文章:

java - 使用 JSON 将数组传递给 Android 应用程序

java - 使用 Solr 搜索索引作为数据库 - 这是 "wrong"吗?

laravel - Composer 在您的平台中检测到问题 : Your Composer dependencies require a PHP version ">= 7.2.5"

css - 如何使数字和字母底部均匀

PHP mysql 查询临时表不起作用

javascript - 使用 Json 如何根据数据库中的值选择单选按钮?

PHP 模十进制

javascript - AngularJS MySQL REST - 来源 http ://localhost:8383 is not allowed by Access-Control-Allow-Origin

java - 如何修复错误包 com.mysql 不存在

php - 如何检查用户电子邮件是否已经存在