簡體   English   中英

Eloquent數據透視表中的where子句

[英]Where clause in pivot table with Eloquent

我有三個數據庫表。

fb_pageslanguagesfb_page_likes

fb_pages將Facebook頁面和一些數據保存到其中

+----+--------------------+-----------------+-------------------+---------------+-------------------+----------------+---------+-------------------------------------+---------------------+---------------------+
| id | page_categories_id |   facebook_id   | facebook_username | facebook_name | facebook_category | facebook_likes | creator |              permalink              |     created_at      |     updated_at      |
+----+--------------------+-----------------+-------------------+---------------+-------------------+----------------+---------+-------------------------------------+---------------------+---------------------+
|  1 |                  2 | 552825254796051 | mesutoezil        | Mesut Özil    | Athlete           |       28540064 |         | https://www.facebook.com/mesutoezil | 2015-07-14 10:09:30 | 2015-08-25 16:43:35 |
+----+--------------------+-----------------+-------------------+---------------+-------------------+----------------+---------+-------------------------------------+---------------------+---------------------+

第二種表格languages包含用於檢查哪個facebook_page在哪個國家/地區擁有多少粉絲的語言

+----+----------+---------------------+---------------------+
| id | language |     created_at      |     updated_at      |
+----+----------+---------------------+---------------------+
|  1 | ID       | 2015-08-25 16:38:35 | 2015-08-25 16:38:35 |
|  2 | TR       | 2015-08-25 16:38:35 | 2015-08-25 16:38:35 |
+----+----------+---------------------+---------------------+

第三張表fb_page_likes只是一個數據透視表,用於檢查哪個粉絲頁面在哪個國家/地區擁有多少fb_page_likes

+----+-------------+------------------+---------+---------------------+---------------------+
| id | language_id | facebook_page_id |  likes  |     created_at      |     updated_at      |
+----+-------------+------------------+---------+---------------------+---------------------+
|  1 |           1 |                1 | 3271717 | 2015-08-25 16:38:35 | 2015-08-25 16:38:35 |
|  2 |           2 |                1 | 1588001 | 2015-08-25 16:38:35 | 2015-08-25 16:38:35 |
|  3 |           3 |                1 | 1464810 | 2015-08-25 16:38:35 | 2015-08-25 16:38:35 |
+----+-------------+------------------+---------+---------------------+---------------------+

我現在要做的是獲取一個FacebookPage,看看它在特定國家/地區有多少喜歡的人。

例如:我想檢查使用語言TR用戶對Mesut Oezil的喜歡程度。

這就是我目前遇到的問題,因為我不知道如何獲取該數據。 我設法獲得了分配給頁面的所有語言,但我想獲得特定頁面的贊。

在我的模型FacebookPage我創建了一個EmiratesToMany關系

public function languages()
{
    return $this->belongsToMany(Language::class, 'language_page_likes');
}

在我的Language模型中,我也做到了

public function pages()
{
    return $this->belongsToMany(FacebookPage::class, 'language_page_likes');
}

我了解到,這是在laravel中定義多對多關系的方式。 現在,有了

\\App\\Models\\FacebookPage::find(1)->languages;

我正在獲得一個頁面上所有帶有粉絲的語言,但我希望在特定國家/地區擁有喜歡的語言。 可以是一個國家或一組國家。

我也這樣嘗試過

App\Models\FacebookPage::find(1)->with(['languages' => function($query){
    return $query->where('language_id', 1);
}])->get()

但這以某種方式給了我所有的Facebook頁面,而不是ID為1的頁面。

另外,我想獲得德國的所有Mesut Oezil贊,以及德國,奧地利和瑞士的Mesut Oezil贊。 我將如何實現?

我現在設法做到了。 如果有人有更好的方法,請告訴我。 (不過會整理一下代碼)

$languages = [1, 2, 3];
$page = \FBFeedParser\Models\FacebookPage::with(['languages' => function($query) use ($languages) {
    $query = $query->select(['language', 'likes']);
    $query = $query->where('language_id', $languages[0]);
    if (sizeof($languages) === 1) {
        return $query;
    }
    unset($languages[0]);
    foreach ($languages as $language) {
        $query = $query->orWhere('language_id', $language);
    }
    return $query;
}])->find(1);
print $page->facebook_name;
print '<hr>';
foreach ($page->languages as $language) {
     print $language->language . ' // ' . $language->likes . '<br>';
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM