Слишком мало аргументов для функции CI_DB_query_builder :: join (), 1 передано и как минимум 2 ожидается при использовании таблицы соединения в PHP (Codeigniter) - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь сократить все мои методы в моей модели, поэтому я решил сделать ее динамичной. Закончено в создании динамики для вставки, обновления, выборки, удаления, но возникла проблема при создании динамического соединения для объединения двух таблиц.

Произошла ошибка:

"Слишком мало аргументов для функции CI_DB_query_builder :: join (), 1 передано в C: \ xampp \ htdocs \ snapmatic \ application \ models \ Crud_model.php на линии 130 и как минимум 2 ожидаемых "`

ПРИМЕЧАНИЕ. В этом проекте модуль, за которым я работаю, «следует», где пользователь может следовать за конкретным человеком (например, instagram). У меня есть 2 таблицы с именем: пользователи и следующие.

В моей "следующей таблице" мои столбцы: id, user_id и user_following. User_id - это место, где учетная запись выполнила вход, а user_following - это то, за которым вы следовали.

Scenario: In my table users, you have 2 data: Person 1 and Person 2
Person 1 account is logged in then Person 1 followed Person 2.

После того, как Человек 1 нажал кнопку «следовать», в моей таблице следующее будет выглядеть так:

id: 1 user_id: 1 user_follow:2

ЭТО МОЙ Контроллер

$id = $this->session->user_id;
$where = array('following.user_id => $id');
$join  = array('following,following.user_following = users.id');
$fetch_following = $this->Crud_model->join_table('*','users',$where,$join);

//Also tried these
//$where = "('following.user_id', $id)";
//$where = "'following.user_id', $id)";
//$where = "('following.user_id, $id')";
//$where = "'following.user_id, $id'";
//$join  = "'following,following.user_following = users.id'";
//$join  = "('following,following.user_following = users.id')";
//$join  = "('following','following.user_following' = 'users.id')";

Модель

public function join_table($tag,$table,$where,$join){
    // public function join_table($id){

        $this->db->select($tag);
        $this->db->from($table);
        $this->db->join($join);

        $this->db->where($where);
        // $this->db->select('*');
        // $this->db->from('users');
        // // $this->db->group_by('invoice_number'); 
        // $this->db->join('following','following.user_following = users.id');
        // $this->db->where('following.user_id', $id);
        $result = $this->db->get();
        return $result->result();
    }

Часть комментариев работает, но я бы хотел сделать ее динамичной.

Вопрос: Как создать динамический метод объединения таблиц?

1 Ответ

0 голосов
/ 04 июля 2018

Надеюсь, это поможет вам:

сохраните условия join table и on в две разные переменные, а $where должен быть массивом с парой ключ-значение, подобным этому:

Ваш контроллер должен быть таким:

$id = $this->session->user_id;
$where = array('following.user_id' => $id);
$join_table = 'following';
$join_on = 'following.user_following = users.id';

$fetch_following = $this->join_table('*','users',$where,$join_table,$join_on);

Ваш join_table метод должен быть таким:

public function join_table($tag,$table,$where,$join_table,$join_on)
{
  $this->db->select($tag);
  $this->db->from($table);
  $this->db->join($join_table,$join_on);

  $this->db->where($where);  
  $query = $this->db->get();
  return $query->result();
}

Для более: https://www.codeigniter.com/user_guide/database/query_builder.html

...