Laravel雄辩地联接2个具有不同名称的表

时间:2018-08-25 16:25:32

标签: php laravel eloquent

我想使用雄辩的laravel连接2个表t_admin和t_article。这是表t_admin:

id_adm| name   | email
-------------------------
 4    | Arya   | arya@mail.com  
 7    | Andrea | andrea@mail.com
 12   | Adibah | adibah@mail.com

表t_article:

id_article | id_admin    | title
--------------------------------
 1         |      4      | AAA  
 2         |      12     | BBB
 3         |      7      | CCC

基于该表,t_admin.id_adm = t_article.id_admin。

这是我的模特 Admin.php

 class Admin extends Model
    {
        protected $fillable = [
            'id_adm','name','email',
        ];
        protected $table = 't_admin';
    }

Article.php

class Article extends Model
{
    protected $fillable = [
        'id_article','id_admin','title',
    ];
    protected $table = 't_article';
}

2 个答案:

答案 0 :(得分:1)

在您的管理模型中创建关系: 注意:我假设管理员可以撰写很多文章。

public function articles(){
    return $this->hasMany('App\Article', 'id_admin');
}

然后,每当要获取属于管理员的所有文章时,请执行以下操作:

$adminArticles = Admin::find($adminId)->articles

在管理员只能有一篇文章的情况下,请执行以下操作:

public function article(){
    return $this->hasOne('App\Article', 'id_admin');
}

然后,每当您要获取属于管理员的文章时,请执行以下操作:

$adminArticle = Admin::find($adminId)->article

阅读here了解更多信息。

您还可以使用Laravel的查询生成器自己编写联接查询。 对于您的情况,您可以这样做:

$adminArticles = DB::table('t_admin')
            ->join('t_article', 't_admin.id_adm', '=', 't_article.id_admin')
            ->select('t_admin.*', 't_article.title')
            ->get();

答案 1 :(得分:1)

将关系添加到假设一对多的模型中

class Admin extends Model
    {
        protected $fillable = [
            'id_adm','name','email',
        ];
        protected $table = 't_admin';


    /**
     * Get the articles for admin.
     */
    public function articles()
    {
        return $this->hasMany('App\Article');
    }

    }



class Article extends Model
{
    protected $fillable = [
        'id_article','id_admin','title',
    ];
    protected $table = 't_article';

    /**
     * Get the user for the article post.
     */
    public function user()
    {
        return $this->belongsTo('App\Admin');

    }
}

您可以通过以下方式检索它们

$articles = App\Admin::find(1)->articles;

foreach ($articles as $article) {
    //
}