Tomoe

573 经验值

因為還有其他地方會通過 app() 來取得實例,dd()會顯示結果並直接終止系統,照你這情況應該是最先調用到 path.storage ,並不一定是你寫的,可能是系統裡面就有做調用,沒猜錯應該是 Log 的前置處理。

@Peter_Yuan_辉 可以在說得清楚些嗎?因為你最上面文中已經說出了為啥會這樣跳的原因了。

app() 這個方法算是 Laravel 這邊提供一個比較方便操作 Container 的方式,放在 helper 中並暴露給全局,其實你直接跳過 app() 使用 Container::getInstance()->make() 也是一樣的操作

@TonyWang

這個有個簡潔的方法可以讓你提交整個 Form
主要是利用 FormData 其實可以直接丟一個 Form 進去,他會自動處理那些欄位。

jsFiddle
裡面vue-resource部分註解掉了,你可以透過console看一下轉換成果,要注意的是 FormData 不能直接 console.log , 必須透過 FormData.entries() 取得 iterator ,進行迭代才能顯示裡邊的 key/value

還有一點是我把 submit 綁定到 form 上時用了修飾符 submit.prevent="submit" , 這樣是會直接幫我們 event.preventDefault() ,比較方便。

<div id="main">
    <form @submit.prevent="submit">
        姓名
        <div class="field">
            <input name="name" type="text">
        </div>
        性別
        <div class="field">
            男<input name="gender" type="radio" value="male">
            女<input name="gender" type="radio" value="female">
        </div>
        <input type="submit" value="送出">
    </form>
</div>
new Vue({

    el: '#main',
    methods: {
        submit: function(event) {
            // FormData支援把 Form 元素丟進去
            var formData = new FormData(event.target)
            
            this.$http.post('/path/to', formData, function (data, status, request) {
                 // Success
            }).error(function (data, status, request) {
                 // Error
            });

        }
    }

})

使用 iframe 反而更消耗資源,因為iframe外你使用的 css, js 等等都不會影響到 iframe 裡面的東西,變成你必須各自讀取一次,再者還有其他 SEO 之類的問題,你不會想用 iframe 的 XD

你應該把精力放在壓縮各種資源文件,或是架構上的良好設計~

@JellyBool
其實可以不用透過 v-el ,因為觸發事件時就會把觸發的元素傳進來 :P

upload: function(e) {
  var files = e.target.files
  // 同上
}

這樣做的另一個好處是可以共用邏輯

@v1tal
你再傳資料給前端時,就必須預先把一些敏感性資料給篩選掉,例如你的 User ,就應該只傳 nameemail 等欄位,不該出現 password,這部分可以很方便的在 Model 裡面的 $hidden 做設置,這是 Laravel 在序列化時,會略過的欄位,其實如果你是用預設的會員系統,就可以發現裡面已經幫你隱藏掉了。

這是浮點數運算的老問題了,不只 PHP ,其他語言也有同樣的問題,實際原因講起來太長,可以參考:http://blog.dcview.com/article.php?a=VmhQNVY%2BCzo%3D

但是我們可以靠 number_format 來進行四捨五入:

// 第二個參數是取到小數第幾位
number_format(18784.4-18785, 1)
// => -0.6

首先你給 Vue 的資料必須已經是把所有關連加載好的,因為 Laravel 是靠 Blade 來渲染樣板,會預先處理完所有變量或是 @foreach 這些操作,所以你傳一個 ModelView,他還能直接在樣板中做關聯查詢,但是 Vue 不能,Javascript是在瀏覽器上處理,你傳給他什麼資料,他就只能照那資料顯示,不能透過 $article->user->name 這種方式去做關聯查詢,所以粗略流程是這樣

Blade -> Vue -> 原生Html

而關聯查詢只能在 Blade 以前處理,所以你必須先加載好所有要關聯的資料,也就是 Eager loading

可以用這種方式預先加載 User

// 取得全部 Article ,同時載入 User
Article::with('user')->get();

Vue

<div class="article" v-for="article in articles">
   <div class="user">{ article.user.name }</div>
   <div class="body">{ article.body }</div>
</div>

用了100%的腦域試著空想排版你的源碼後:

你不能直接對著 all() call Model 裡面定義的方法

// 因為ReservationDetail::all()回傳的是 Collection
ReservationDetail::all()->belongsToReservation()

如果要預先載入關聯的話請用 wtihwith 裡面要打你關聯用的 method,所以整個來講應該是這樣

Reservation

class Reservation extends Model {
  protected $table = 'dbo.Reservation';
  public function reservationDetails() {
    return $this->hasMany('App\Models\ReservationDetail', 'ReservationID', 'ReservationID');
  }
}

ReservationDetail

class ReservationDetail extends Model {
  protected $table = 'dbo.ReservationDetail';
  public function reservation() {
    return $this->belongsTo('App\Models\Reservation', 'ReservationID', 'ReservationDetailID');
  } 
}

ReservationController 

public function showByReservationNo($reservation_no) {
  $reservationDetails = ReservationDetail::with('reservation')
                      ->where('ReservationNo', '=', $reservation_no)
                      ->get();
  return $reservationDetails;
}

@perfectboook
試了下好像是正常的...
不過這邊忘記加 name

<input type="text" value ="{ old('name') }" class="form-control input-sm">

應該是

<input name="name" type="text" value ="{ old('name') }" class="form-control input-sm">

@freelsnamn
嗯...這邊提幾個建議,PHP的變量名或者是數組的索引,資料庫的表名、字段名,盡量盡量不要用中文,可以避免掉很多不預期錯誤,想想如果換個非GBK環境,解析上很容易出錯。

就你的業務邏輯來看

    DB::transaction(function () use ($db,$accountDocuments,$orderId,$update) {
        DB::connection($db)->table('财务记账表')->insert($accountDocuments);
        // 這邊會有兩種情況
        // 找到資料並更新
        // 找不到資料且也不更新 ( 這部分並不會產生任何錯誤 )
        DB::connection($db)->table('订单表')->where('订单id', $orderId)->update($update);
    });

所以並不會有回滾情況產生