泰勒(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');
}
}
答案 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);
}
}
答案 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();