0

これは、データベース内のテーブル製品とカテゴリの例です。

tbl_categories

 |id_category | name........| slug........|

 |1...........| Hanger .....| hanger .....|
 |2...........| Lamp .......| lamp .......|
 |3...........| Merchandise | merchandise |
 |4...........| Storage ....| storage ....|

tbl_products

id_products | id_category | name .....| slug .....| images

1 ..........| 1 ..........| Hanger asd| hanger-asd|json
2 ..........| 1 ..........| Hanger asd| hanger-dsa|json
3 ..........| 1 ..........| Hanger asd| hanger-das|json
4 ..........| 1 ..........| Hanger asd| hanger-sad|json

画像のコンテンツは、次のように json_encoded です。

id_product: 1

{
    "7b8d9fbfe384b1b6e4cfb0da473df8e5": {
        "alt": "jhonson hanger", 
        "caption": "", 
        "filename": "7b8d9fbfe384b1b6e4cfb0da473df8e5.jpg", 
        "primary": true
    }, 
    "f7d225c85590012f91bad32dd8adaa3d": {
        "alt": "jhonson hanger", 
        "caption": "lorem ipsum lorem ipsum dolor siamet ameticioud", 
        "filename": "f7d225c85590012f91bad32dd8adaa3d.jpg"
    }
}

私が最初にしたいことは、すべての製品を e コマース製品ページに表示することです。そのため、コントローラー製品では次のようになります。

function index()
{
    $data = array(
        "keyword" => "sadasdasd",
        "description" => "asdasdasd",
        "content" => "product",
        "title" => "BALOK Official :: Product"
    );
    $products = $this->model_product->get_all_products();
    $data['products'] = $products;

    $this->load->view("product", $data);
}

私のmodel_productで:

function get_all_products()
{
    $this->db->select
    ("
        tbl_product.name AS prod_name,
        images,
        tbl_product.slug AS prod_slug,
        tbl_categories.slug AS cat_slug
    ");
    $this->db->from("tbl_products");
    $this->db->join("tbl_categories", "tbl_categories.id_category = tbl_product.id_category");
    $this->db->order_by("prod_name", "ASC");
    $query = $this->db->get();

    if($query->num_rows() > 0)
    {
        return $query->result();
    }
    else
    {
        return false;
    }
}

製品名、prod_slug、cat_slug、およびビュー内のすべての製品に対して1 つだけを表示する方法、および 「primary = true」の場合はプライマリ イメージを表示するよりも、それ以外の場合は最初のイメージを表示する方法。配列の例かもしれません。images['filename]images[0];

次のコードを使用して、フィールド イメージのデータを確認しました。

foreach ($products as $prod)
{
    $prod->images = json_decode($prod->images);
    print_r($prod->images);
}

stdClassそして、それは次のようなオブジェクトを示しています:

stdClass Object
(
    [43f8cd2ba0fcb96453b43b36b6a4f759] => stdClass Object
    (
        [filename] => 43f8cd2ba0fcb96453b43b36b6a4f759.jpg
        [alt] =>
        [caption] =>
        [primary] => 1
    )
)
stdClass Object
(
    [f7d225c85590012f91bad32dd8adaa3d] => stdClass Object
        (
            [filename] => f7d225c85590012f91bad32dd8adaa3d.jpg
            [alt] => jhonson hanger
            [caption] => lorem ipsum lorem ipsum dolor siamet ameticioud
            [primary] => 1
        )
    [7b8d9fbfe384b1b6e4cfb0da473df8e5] => stdClass Object
    (
        [filename] => 7b8d9fbfe384b1b6e4cfb0da473df8e5.jpg
        [alt] => jhonson hanger
        [caption] =>
    )
)
stdClass Object
(
    [29c2100ff85ec538e17c6d68fafbd43d] => stdClass Object
        (
            [filename] => 29c2100ff85ec538e17c6d68fafbd43d.jpg
            [alt] =>
            [caption] =>
            [primary] => 1
        )
    [8d4ecb9c4dc369febe70019586f3d570] => stdClass Object
    (
        [filename] => 8d4ecb9c4dc369febe70019586f3d570.jpg
        [alt] =>
        [caption] =>
    )
    [dc4358c470c33f20206afc180a28ae5b] => stdClass Object
        (
            [filename] => dc4358c470c33f20206afc180a28ae5b.jpg
            [alt] =>
            [caption] =>
        )
)

そのstdobjectは私を混乱させます。

アップデート。
ビューで私はこれを書きます:

foreach ($products as $prod)
{
  echo $prod->prod_name.' - '.$prod->prod_slug.' - '.$prod->cat_slug.'<br>';
}

それは私が望むものを成功に表示します。

Book Cabinets Wood - book-cabinets-wood - storage
Brand New Hanger Jhonson - brand-new-hanger-jhonson - hanger
Flash Wood - flash-wood - 商品
Gantungan baju dari kayu - gantungan-baju-dari-kayu - hanger
Shaman Lamp - shaman-lamp - lamp
Storage Wood Shelf - storage-wood-shelf - storage
Wood Lamp - wood-lamp - lamp
Wood Lamp Transcending - wood-lamp-transcending - lamp
Yoyo Kayu - boneka-kayu-lucu - 商品

画像はまだjson形式であり、それを操作する方法がわかりません.array_valueについて考えているだけで、配列にデコードされた後にjson_dataを変換できますか?

4

2 に答える 2

0

JSON データを使用する説得力のある理由はありますか? そうでない場合は、単に tbl_products_images という名前の新しいテーブルを作成し、前の JOIN で結合します。

于 2013-07-01T07:11:55.700 に答える