我有三个数据库表。
fb_pages
,languages
,fb_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
只是一个数据透视表,用于检查哪个粉丝专页有哪些喜欢哪个国家/地区
+----+-------------+------------------+---------+---------------------+---------------------+
| 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 |
+----+-------------+------------------+---------+---------------------+---------------------+
我现在要做的是获取一个Facebook页面,看看它在特定国家有多少喜欢。
例如:我想查看有多少人喜欢Mesut Oezil来自语言为TR
的用户。
这就是我目前遇到的问题,因为我不知道如何获取这些数据。我设法获得分配给页面的所有语言,但我想获得特定页面的喜欢。
在我的模型FacebookPage
中,我创建了一个belongsToMany关系
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。我将如何实现这一目标?
答案 0 :(得分:0)
我现在设法做到了。如果有人有更好的方法,那么请告诉我。 (但要稍微清理一下代码)
$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>';
}