Laravel / Cashier发票()返回空对象

时间:2014-03-15 11:25:05

标签: laravel laravel-4 stripe-payments

泰勒(https://github.com/laravel/cashier)的收银员套餐出了问题。当我尝试获取用户的发票时,返回的对象为空。 有关信息,我将收银员数据库列设置为成员资格表!然后建立适当的关系。 如果我这样做,我可以向用户收费:

$user->membership->subscription('1month')->create($token);

但如果我想得到这样的发票

$invoices = $user->membership->invoices();

它返回一个空的Object。

我做错了什么?

由于

更新: 这是模型中的代码:

User.php
public function membership() {
        return $this->hasOne('Membership');
    }

Membership.php
class Membership extends \Eloquent implements BillableInterface {

    use BillableTrait;

   /**
     * @var array
     */
    protected $dates = ['trial_ends_at', 'subscription_ends_at'];

    public function user_membership() {
        return $this->belongsTo('User');
    }
}

5 个答案:

答案 0 :(得分:3)

如果您将其作为JSON或类似物品提取,这可能是从您的控制器返回的有用代码段:

    public function index()
    {
        $user = auth()->user();

        if($user->hasStripeId()) {
            $invoices = $user->invoices()->map(function($invoice) {
                return [
                    'date' => $invoice->date()->toFormattedDateString(),
                    'total' => $invoice->total,
                    'download' => '/user/download/invoice/' . $invoice->id,
                ];
            });
        } else {
            $invoices = [];
        }

        return [ 'invoices' => $invoices ];
    }

在Cashier v7.x中测试

答案 1 :(得分:2)

对于那些也在努力解决这个问题的人,我发现只返回$发票会显示一个空白的json数组,但是如果你将$发票传递给一个视图,并使用foreach循环就可以了。

例: 这将返回一个空白数组

$invoices = $user->invoices();

return $invoices

以下将返回一个值,即使它在原始json返回中显示为空白。

$invoices = $user->invoices();

foreach ($invoices as $invoice)

{

$test = $invoice->dateString();

}

return $test;

答案 2 :(得分:2)

我正在使用Laravel 5.1,如果你签出\ laravel \ cashier \ src \ Laravel \ Cashier \ Invoice.php,你可以看到Invoice对象上的所有可用方法。

您必须遍历$ this-> user-> invoices()对象才能使用这些方法,但如果您正在查找发票数据的详细转储,则可以调用getStripeInvoice()。

这会转储与发票相关的所有数据。

class Test
{
    private String foo = "foo";
    private String fooBar = foo + "bar";
    private int x = 10;
    private int y = x * 10;
    private MyInt my = new MyInt(5);
    private int z = x * my.get();

    public static void main (String[] args) throws java.lang.Exception
    {
        Test t = new Test();
        System.out.println(t.foo);
        System.out.println(t.fooBar);
        System.out.println(t.x);
        System.out.println(t.y);
        System.out.println(t.z);
    }
}

enter image description here

答案 3 :(得分:1)

我知道这并不是使用laravel Cashier。我使用条带,它们的API简单易懂。

我决定使用

\Stripe\Invoice::all(['customer' => $this->user->stripe_id]);

条带包包含在Cashier中,因此不需要额外的供应商文件

如果您想将数据发布到js前端应用程序,这将特别有用。

Laravel Cashier希望您使用发票项目类中提供的给定功能在刀片中构建视图,如果您使用laravel作为完整的MVC,如果您使用作为api而不是那么好,那么这是非常好的预先构建对象数组。

答案 4 :(得分:0)

在致电subscription()

之前,请尝试添加invoices()

$user->membership()->subscription()->invoices();