hasMany与hasOne前台怎样调用 [ 2.0 版本 ]
如题
我有两个表,一个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”
最佳答案
-
你應該先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 条回复dingjj2010 回复于 2015-10-30 18:01 回复@drykiss 你的orders 是复数。。。估计是1对多,查询出来的。hasMany查询出来的即使也是只有一条数据,也要用orders[0]来获取。这么说吧:hasMany查询出来的本身就是个数组,查询出来的记录在数组里面,如[model1,model2],即使1条也是[model1]。hasOne查询出来就是一个记录,如:model1。
如@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) 的方式型態
bryson 觉得很赞
其他 2 个回答
-
dingjj2010 回答于 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();
drykiss
最后登录:2018-05-04
在线时长:51小时27分
- 粉丝6
- 金钱4520
- 威望0
- 积分5030