0

私は Jamie Rumbelow の MY_Model を使用しており、追加のデータが含まれるように関数を追加する必要がありました。

この投稿を見て、これを達成するために必要なものを見つけるのに役立ちましたが、SQL エラーが発生しています。何が間違っているかについてのアイデアはありますか?

エラー番号: 1064

SQL 構文にエラーがあります。titles'FROM ( ) JOIN usersONの近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してくださいtitlescreator_id= users. user_id' 2 行目

SELECT CONCAT_WS(' ', `users`.`first_name`, `users`.`last_name)` AS creator FROM (`titles`) JOIN `users` ON `titles`.`creator_id` = `users`.`user_id`

public function with_creator()
{
    $this->db->join('users', 'titles.creator_id = users.user_id');
    $this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator");

    return $this;
}

Jamie の MY_Model を使用するときは、次のコードを使用します。

// In controller
$pages = $this->pages->with_creator()->get_all();

// In Model
class Pages_m extends MY_Model 
{
public $_table = 'pages';
public $primary_key = 'page_id';

public function with_creator()
    {
        $this->db->join('users', 'pages.creator_id = users.user_id');
        $this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE);

        return $this;
    }
}

また、作成インデックスのみが含まれ、ページ自体のデータは含まれません。

4

2 に答える 2

3

これは、CodeIgniter のアクティブ レコード/クエリ ビルダー自体のバグです。ジェイミーのベースモデルとは無関係です。このバグは、コンマを区切り文字としてSELECT使用して文字列が分割されているために発生します。explode()関数にはコンマがあるため、特定のシナリオではいくつかの間違いが発生します。

次の 2 つのオプションがあります。

  1. クエリを手動で記述します。クエリ ビルダーを常に使用する必要はありません。特に、単一の種類のデータベースのみをターゲットにしている場合はそうです (クエリ ビルダーの大きな特徴は、アプリケーションを DB に依存しないようにすることです)。

  2. SELECTその特定の呼び出しをエスケープしないようにクエリ ビルダーに指示します。これは、次の 2 つの方法で行うことができます。

配列構文:

$this->db->select(array("CONCAT_WS(' ', users.first_name, users.last_name) AS creator"));

エスケープ パラメータ:

$this->db->select("CONCAT_WS(' ', users.first_name, users.last_name) AS creator", FALSE);

このバグは、CI 3.0 が安定したときに修正する必要があります。開発版ではまだ修正されていませんが、問題はわかっています。解決してマージする必要があるだけです。フィードバックがある場合は、こちらから投稿できます

問題を選択してください:クエリはcreator連結結果のみを返します。これは、要求しているのはそれだけであるためです。このget_all()メソッドは、すべてを自動的に選択するわけではありません。これは、クエリ ビルダーの標準的なデフォルトです。呼び出しを指定するselect()と、デフォルトの代わりにそれが使用されます*

を変更select()(または別の列を追加) して、他の列が正しく呼び出されるようにする必要があります。

于 2013-04-18T20:40:35.577 に答える