Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在表中仅显示没有HABTM关联的行_Php_Mysql_Cakephp_Has And Belongs To Many - Fatal编程技术网

Php 如何在表中仅显示没有HABTM关联的行

Php 如何在表中仅显示没有HABTM关联的行,php,mysql,cakephp,has-and-belongs-to-many,Php,Mysql,Cakephp,Has And Belongs To Many,我有一个我正在编写的新闻提要应用程序,我想找出一种方法,能够将每一篇新闻文章标记为已被每个用户单独查看。我试图实现的当前方法是考虑PosithLoSuxes用户表中的任何行,如果用户有一个条目,将当前的用户ID与当前的文本ID关联起来,则该用户查看此文章。 这是我到目前为止所拥有的 在我的文章模型中: 导出my articles_users表的结构和内容: 但是,尽管article_id 3266与用户_id 4关联,我仍然看到该文章出现,因为在条件下,我的ArticlesUser.articl

我有一个我正在编写的新闻提要应用程序,我想找出一种方法,能够将每一篇新闻文章标记为已被每个用户单独查看。我试图实现的当前方法是考虑PosithLoSuxes用户表中的任何行,如果用户有一个条目,将当前的用户ID与当前的文本ID关联起来,则该用户查看此文章。 这是我到目前为止所拥有的

在我的文章模型中:

导出my articles_users表的结构和内容:


但是,尽管article_id 3266与用户_id 4关联,我仍然看到该文章出现,因为在条件下,我的ArticlesUser.article_id article.id不相等。在我的索引方法/操作中,如何仅显示没有与当前用户id关联的文章id的文章?

感谢franglais的评论。如果其他任何人有此问题,我现在就让它与:

protected function _findAvailable($state, $query, $results = array()) {
    if ($state === 'before') {
        $limit = (Configure::read('AppSettings.itemsperpage') ? Configure::read('AppSettings.itemsperpage'): '8');
        $query['limit'] = $limit;
        $query['order'] = 'Article.listdatetime DESC';
        if (!empty($query['operation']) && $query['operation'] === 'count') {
            return $query;
        }
        $query['joins'] = array(
            array(
                'table' => 'articles_users',
                'alias' => 'ArticlesUser',
                'type' => 'INNER',
                'conditions' => array(
                    'ArticlesUser.user_id' => CakeSession::read("Auth.User.id"),
                    'ArticlesUser.article_id <> Article.id'
                )
            )
        );
        $query['group'] = 'Article.id';
        return $query;
    }
    return $results;
}

articlesuser.article\u id不在用户id=4的文章的选择id中?谢谢你,franglais,你的评论让我非常接近。我用'Article.id NOT IN SELECT Article\u id FROM articles\u users'代替了'ArticlesUser.Article\u id Article.id'是的,我有一种感觉,它会出现在那一块!你可以把这个写下来作为问题的答案!也许我说得太早了。我现在注意到,只有在articles\u users表中至少有一行将用户与文章关联时,这种方法才能正常工作。如果articles\u users表为空,则index方法不返回任何行。
public function index() {
    $this->paginate = array('available');
    $articles = $this->paginate();
    $this->set(compact('articles'));
}
--
-- Table structure for table `articles_users`
--

CREATE TABLE IF NOT EXISTS `articles_users` (
`id` int(11) NOT NULL,
  `article_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `articles_users`
--

INSERT INTO `articles_users` (`id`, `article_id`, `user_id`) VALUES
(2, 3266, 4);
protected function _findAvailable($state, $query, $results = array()) {
    if ($state === 'before') {
        $limit = (Configure::read('AppSettings.itemsperpage') ? Configure::read('AppSettings.itemsperpage'): '8');
        $query['limit'] = $limit;
        $query['order'] = 'Article.listdatetime DESC';
        if (!empty($query['operation']) && $query['operation'] === 'count') {
            return $query;
        }
        $query['joins'] = array(
            array(
                'table' => 'articles_users',
                'alias' => 'ArticlesUser',
                'type' => 'INNER',
                'conditions' => array(
                    'ArticlesUser.user_id' => CakeSession::read("Auth.User.id"),
                    'ArticlesUser.article_id <> Article.id'
                )
            )
        );
        $query['group'] = 'Article.id';
        return $query;
    }
    return $results;
}