suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Laravel weiß eloquent, wie man einer Anfrage beitritt

Annahme

One Piecethread(帖子) 预加载 comments(评论)和 comments.user (Benutzer, der kommentiert hat)

Normalerweise können Sie es mit nur einer Codezeile erhalten

$thread = Thread::with('comments', 'comments.user')->first();

Das ist kein Problem und kann sehr gut abgefragt und angezeigt werden.

$comment = $thread->comments[0]; // Comment Model
$user = $comment->user; // User Model

Aber die aktuelle Forderung lautet: Wenn Benutzerdaten, die einen Kommentar abgegeben haben, gelöscht werden, können die natürlich zugehörigen Kommentardaten nicht angezeigt werden, da sonst die Informationen unvollständig sind (ist das eine normale Forderung, oder?)

Dann gibt es logischerweise nur noch inner join 查询就可以过滤掉不符合的数据.
LaravelEloquent 目前我只查到withMethode

Dieser Bedarf kann leicht gelöst werden durch YiiActiveRecord

$thread = Thread::find()->innerJoinWith(['comments', 'comments.user'])->one();

Ich bin damit nicht sehr vertraut, daher möchte ich einen Experten auf diesem Gebiet fragen, wie man es löst. Vielen Dank!Laravel

PHP中文网PHP中文网2797 Tage vor1386

Antworte allen(6)Ich werde antworten

  • 習慣沉默

    習慣沉默2017-05-16 16:53:58

    laravel中查询构建器中的join默认就是inner join的行为,手册是这么说的

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 16:53:58

    $thread = Thread::with(['comments' => function ($query) {
        $query->whereNotNull('user');
    }, 'comments.user'])->first();

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-16 16:53:58

    Eloquent ORM没有直接的join查询条件,但也有变通方法,如楼上所说。
    不过我一般不用ORM,因为性能原因。我用Query Builder。

    Antwort
    0
  • PHP中文网

    PHP中文网2017-05-16 16:53:58

    
    \DB::('threads')
           ->where(['threads.id'=>$id])
           ->leftJoin("comments",'therads.id','=','comments.tid')
           ->paginate() 

    Antwort
    0
  • 巴扎黑

    巴扎黑2017-05-16 16:53:58

    在关系里写上join就好了,->hasMany()->join()->where() 想怎么写怎么写

    Antwort
    0
  • 世界只因有你

    世界只因有你2017-05-16 16:53:58

    其实我问的主要是用法, 这种需求很常见. 主要是问下有没有这方面的问题

    这个在rails里都是有实现的
    laravel 目前我看到的只有一个with

    rails里有 preloadincludesEager loadJoins, 可以来区别eager loading数据的方式.
    这里有篇文章来讲解
    http://www.mamicode.com/info-...

    YiiActiveRecord也有with, joinWith(inner join, left join ....) innerJoinWith, 来根据需求做eager loading

    其他的我就不查了. 并不是我要损laravel, 我是到现在也没有觉得laravelEloquent强大在哪里

    Antwort
    0
  • StornierenAntwort