2015-10-30 10:58:10 12800次浏览 3条回答 1 悬赏 10 金钱

如题

我有两个表,一个order,一个customer,
customer:

public function getOrders()
{
return $this->hasMany(Order::className(), ['customer_id'=>'id']);
}

order:

public funciton getCustomer()
{
return $this->hasOne(Customer::className(), ['id'=>'customer_id']);
}

我想生成的数据应该是数组形式,那我在前台用:

<?php echo $orders['id']; ?>

应该可以啊,但为什么老是提示:“Undefined index: id”

最佳答案

  • bryson 发布于 2015-10-30 11:40 举报

    你應該先var_dump models 看看內容是甚麼!!
    hasMany : 一對多 => 一個客戶可以有很多訂單
    hasOne : 一對一 => 一個訂單只能有一個客戶

    把兩張 table join 起來:

    use app\models\Order;
    class Customer extends model
    {
      public function getOrder()
        {
        	return $this->hasMany(Order::classname(), ['id' => 'order_id']);
        }
    }
    
    use app\models\Customer;
    class Customer Controller extends Controller
    {
       $customer = Customer::find()->joinwith('order')->all();
       return $this->render('index',['customer' => $customer])
    }
    
    HTML :  一對多的狀況
    foreach($customer as $key => $val){    //
        $val->id; //各自的 customer['id']
        foreach($val['order'] as $or_key => $or_val){
            $or_val;    //訂單的資訊
        }
    }
    
    
    6 条回复
    回复于 2015-10-30 11:44 回复

    你問題有改了 ~"~ 你看最後的 HTML巴, 你要知道你拿到值的型態是甚麼
    記得先把東西映出來看一下內容再去 search 你要的

    回复于 2015-10-30 11:49 回复

    還有 model 都有用 ArrayAcess
    所以就值是以物件的方式呈現 也可以以陣列的方式取值

    回复于 2015-10-30 14:08 回复
    <?php foreach ($orders as $order):?>
    <?php echo $order['order_name'];?>
    <?php endforeach;?>
    

    这样到是出来了,我有点问题,希望能解释下,为什么要通过foreach赋值给$order才能显示?其实我这只是显示一条,没必要用foreach;还有一点,就是上面那位说的数组和类的显示方式,有什么区别,不是很太懂

    回复于 2015-10-30 18:01 回复

    你的orders 是复数。。。估计是1对多,查询出来的。hasMany查询出来的即使也是只有一条数据,也要用orders[0]来获取。这么说吧:hasMany查询出来的本身就是个数组,查询出来的记录在数组里面,如[model1,model2],即使1条也是[model1]。hasOne查询出来就是一个记录,如:model1。

    回复于 2015-11-02 10:25 回复

    如@dingjj2010上說的:
    一個客戶可能有多格訂單!! 相對的你會有多個客戶!!

    用陣列的方式表示 => [
         '小明'  => [ 
             '第一筆訂單 '  =>  '訂單內容',
             '第二筆訂單'   =>  '訂單內容, 
             //.......(會有多筆)
          ],
          '小美'  => [ 
             '第一筆訂單 '  =>  '訂單內容',
             '第二筆訂單'   =>  '訂單內容, 
             //.......(會有多筆)
          ],
          '小王'  => [ 
             '第一筆訂單 '  =>  '訂單內容',
             '第二筆訂單'   =>  '訂單內容, 
             //.......(會有多筆)
          ]
    ]
    

    你可以把你的 $orders ,嘗試用 var_dump 印出 並且用 html標籤讓他更整齊

    <?php
        echo "<pre>";
            var_dump("$orders");
        echo "</pre>";
    ?>
    

    相信你看到的會是跟上面一樣的情景( 但您的資料必須要一筆以上 )
    那用 foreach($orders as $key => $val) 就是相當於是使用 for迴圈
    他將 $orders 第一次回圈先把 :
    $key => '小明','小美','小王' 顯現出來 另外
    $val (array 他是陣列) 跑這個個互有哪些相對應的訂單
    上述的方法!! 是把所有客戶的訂單表全部列出來在你想要的地方

    如果您不想用 foreach 那您單存只要一筆
    那大可 $orders[0] 去找尋你要的單筆數~ 但你只能搜尋到最後一筆或第一筆
    如果你想這樣去搜尋你指定的單筆數,比較建議您在 sql 去下 where 條件去找尋單筆數
    再把資料傳到 html 顯現

    再來
    Yii 都是讓資料已(類,物件,obj) 的方式型態呈現,
    但只是 yii\base\Model; 都有使用 PHP 的 ArrayAccess 那是將 (類,物件,array) 可以用 (數組,陣列)方式呈現
    所以你在使用上 obj->order_name or obj['order_name'] 兩者都可以的
    但你自己在 framework 以外使用~~ new class or array 就看得出兩者並不能共用
    obj => (類,物件,obj) 的方式型態
    array => (類,物件,array) 的方式型態

    回复于 2015-11-02 14:13 回复

    多谢,虽然不是太懂,要学的地方感觉还有好多

    觉得很赞
  • 回答于 2015-10-30 11:36 举报

    首先:需要用<?php echo $orders->id; ?>取值。因为取出的是类,不是数组。类属性获取用->
    其次,获取数组形式的方式有两种,一种是在查询的时候,例如customer::find()->where($where)->with('order')->asArray()->all();返回的是数组形式,一种是获取了之后再转成数组,例如$customer = customer::findOne($where);$order = $customer->order;$orderArr = $order->toArray();

  • 回答于 2016-01-14 09:21 举报

    $orderArr = $order->toArray(); 最后这个toArray() 提示不识别呀

您需要登录后才可以回答。登录 | 立即注册
drykiss
副总裁

drykiss

注册时间:2015-10-20
最后登录:2018-05-04
在线时长:51小时27分
  • 粉丝6
  • 金钱4520
  • 威望0
  • 积分5030

热门问题