tucker-eric / eloquentfilter Goto Github PK
View Code? Open in Web Editor NEWAn Eloquent Way To Filter Laravel Models And Their Relationships
Home Page: http://tucker-eric.github.io/EloquentFilter
License: MIT License
An Eloquent Way To Filter Laravel Models And Their Relationships
Home Page: http://tucker-eric.github.io/EloquentFilter
License: MIT License
My app is Laravel 5.2 and so far all calls to Model::filter($request->input())
are returning all the models.
Notice I have to use $request->input()
as $request->all()
does not work in Laravel 5.2.
If there is a version of EloquentFilter
that works with Laravel 5.2 please let me know or if it is known to require a higher version of Laravel.
thanks.
Hi Eric:
Thanks for your excellence lib.
just like I mention in the title,
what if the Client model and the User model both have a filed named 'title',
class UserFilter extends ModelFilter
{
public $relations = [
'clients' => ['title', 'potential_volume'],
];
}
public function title($title)
{
return $this->whereLike('title', $title);
}
}
class ClientFilter extends ModelFilter
{
public $relations = [];
public function title($title)
{
return $this->whereLike('title', $title);
}
}
How can they work?
Hi there, is it possible to add relation conditions using OR not AND?
I have:
$this->where('name', 'LIKE', '%' . $text . '%')
->orWhere('excerpt', 'LIKE', '%' . $text.'%')
->orWhere('details', 'LIKE', '%' . $text.'%');
$this->related('format', 'name', 'LIKE', '%' . $text.'%');
$this->related('primaryFormat', 'name', 'LIKE', '%' . $text.'%');
$this->related('meta', function ($query) use ($text) {
return $query->where('key', 'film_synopsis')->where('value', 'LIKE', '%' . $text.'%');
});
Which add the relation conditions on but as AND and it would like it all to OR... Hope that makes sense?
Cheers!
Hello guys,
Very nice package, I'm coming from a RoR environment where filters are there out of the box, I really needed them here also.
My issue is more like a question: is it possible to use the OR logical operator between queries instead of AND?
Thank you,
Lilian
I think it will be useful if the filterInput function changed as following,
ModelFilter.php
public function filterInput()
{
foreach ($this->input as $key => $val) {
// Call all local methods on filter
$method = $this->getFilterMethod($key);
if (method_exists($this, $method)) {
/* $this->{$method}($val);*/
$this->{$method}($val ,$this->input );
}
}
}
then the example filter function would like bellow. inside that function, for an example, we can write any condition that id depends on other args parameters
class UserFilter
public function company($id,$args)
{
//conditoins
return $this->where('company_id', $id);
}
Hi Eric,
First, just want to thank you for making this wonderful piece of software.
Just want to ask for insights on how to implement fuzzy searching within the defined filters.
Thanks in advance!
Regards,
Junel
Hi,
This is a great package and it is really helping my project.
One thing I miss is the ability to order results based on query parameters.
Any thoughts?
I have two Models.
class Member extends Authenticatable
{
use Notifiable;
use EloquentImageMutatorTrait;
use Filterable;
public function modelFilter()
{
return $this->provideFilter(MemberFilter::class);
}
public function evaluation ()
{
return $this->hasOne('App\MemberEvaluation','member_id','id');
}
}
class MemberEvaluation extends Model
{
use Filterable;
protected $fillable = [
'member_id',
'score',
];
public function modelFilter()
{
return $this->provideFilter(MemberEvaluationFilter::class);
}
}
And I made two filters with namespace:
namespace App\ModelFilters\MemberFilters;
use EloquentFilter\ModelFilter;
class MemberFilter extends ModelFilter
{
public $relations = [
'MemberFilters\MemberEvaluation' => ['score_min'],
];
}
use EloquentFilter\ModelFilter;
class MemberEvaluationFilter extends ModelFilter
{
public $relations = [];
public function scoreMin($value)
{
return $this->where('score', '>=', $value);
}
}
But it will get this error,
Call to undefined method Illuminate\Database\Query\Builder::MemberFilters\MemberEvaluation()
How can I set $relations in MemberFilter?
I'm trying to filter my cases
model by patient
, in which both have their own filters respectively. In my patient
filter, I have the following filter I'd like to re-use if possible:
class PatientFilter extends ModelFilter
{
public function name($name)
{
return $this->where('first_name', 'LIKE', DB::getPdo()->quote($name . '%'))
->orWhere('last_name', 'LIKE', DB::getPdo()->quote('%' . $name . '%'))
->orWhereRaw('concat([first_name], \' \', [last_name]) LIKE ' . DB::getPdo()->quote('%' . $name . '%'));
}
}
I'm trying to access this filter from within my CaseEntityFilter
class so I can pass something like patient_name
as a filter on the case and return cases matching the patient name.
Here's what I've tried for the filter on cases, but to no luck:
class CaseEntityFilter extends ModelFilter
{
// Cant seem to get this to point to the method on the actual filter
public $relations = [
'patient' => [
'name',
'firstName',
'patient_name'
]
];
// Produces 'invalid column' error
public function patientName($name)
{
return $this->related('patient', 'name', $name);
}
My database (SQL Server) throws an error about the column name
not existing (which it rightfully doesn't). I can't seem to figure out how to execute the name() method on my patient's filter instead of just querying for the column 'name'.
I'm new to Laravel so is there something I'm missing or would this be considered a feature request?
Thank you for the excellent plugin by the way! :)
HI,
I updated to version 1.3.2 and i have this error:
FatalErrorException in ModelFilter.php line 571:
Call to undefined method Illuminate\Database\Eloquent\Relations\Relation::hasMacro()
in ModelFilter.php line 571
at Application->handleShutdown() in RegistersExceptionHandlers.php line 55
at Application->Laravel\Lumen\Concerns{closure}()
forcing the version to 1.3.1 in composer.json solve the error.
When using the method paginateFilter()
on a model with pivot table, this pivot table is not present inside the model. When changing back to paginate()
the pivot model is back.
companies - company_user - users
In this case, if I would get all the users inside a company, and there would be any additional data inside the pivot table, it would be added inside the 'relations' object inside the model, but this is not present.
I might be missing something but this doesn't seem to be working on models with belongsToMany relationships. Am I wrong? Is there a different way to write it?
Hi Eric.
Thanks for this powerful Filter tool!
Is there a possibility to add an orderBy option to the filter?
Something like this:
?title=lorem&sort:title&direction:asc
Which automatically adds ->orderBy('title', 'asc') to the filter query.
Kind regards
Mathias
I am struggling to create a filter that uses a table "content_features" from another database "sac_repo_db".
If the user doesnโt select a filter the query is created correctly:
SELECT 'purchased_contents'.'id', 'purchased_contents'.'title', 'purchased_contents'.'description', 'sac_repo_db'.'content_features'.'content_type' FROM 'purchased_contents' inner join 'sac_repo_db'.'content_features' on 'purchased_contents'.'content_feature_id' = 'sac_repo_db'.'content_features'.'id' WHERE 'content_type_id' > '0'
However when a filter is applied the query omits the reference to the other database:
select 'purchased_contents'.'id', 'purchased_contents'.'title', 'purchased_contents'.'description', 'sac_repo_db'.'content_features'.'content_type' from 'purchased_contents' inner join 'sac_repo_db'.'content_features' on 'purchased_contents'.'content_feature_id' = 'sac_repo_db'.'content_features'.'id' where exists (select * from 'content_features' where 'purchased_contents'.'content_feature_id' = 'content_features'.'id' and 'content_type_id' in (6))
What it should create is this:
select 'purchased_contents'.'id', 'purchased_contents'.'title', 'purchased_contents'.'description', 'sac_repo_db'.'content_features'.'content_type' from 'purchased_contents' inner join 'sac_repo_db'.'content_features' on 'purchased_contents'.'content_feature_id' = 'sac_repo_db'.'content_features'.'id' where exists (select * from 'sac_repo_db'.'content_features' where 'purchased_contents'.'content_feature_id' = 'sac_repo_db'.'content_features'.'id' and 'content_type_id' in (6))
I realise this is rather a complex question, but I think I am probably missing something fairly simple to get the filter to construct the correct query. It works fine if I use
Any help would much appreciated.
PurchasedContentTableController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
use Illuminate\Http\Request;
use App\ModelFilters\PurchasedContentFilter;
use App\PurchasedContent;
class PurchasedContentTableController extends Controller
{
public function filteredIndex(Request $request)
{
return PurchasedContent
::select('purchased_contents.id', 'purchased_contents.title', 'purchased_contents.description', 'sac_repo_db.content_features.content_type')
->join('sac_repo_db.content_features', 'purchased_contents.content_feature_id', '=', 'sac_repo_db.content_features.id')
->filter($request->all())->get();
}
}
PurchasedContentFilter.php
<?php
namespace App\ModelFilters;
use EloquentFilter\ModelFilter;
class PurchasedContentFilter extends ModelFilter
{
public $relations = [
];
public function contentFeatures($content_type_ids)
{
if ( count($content_type_ids) > 0 ) {
return $this->whereHas('contentFeature', function($query) use ($content_type_ids)
{
return $query->whereIn('content_type_id', $content_type_ids);
});
}
return $this->where('content_type_id', '>', 0);
}
}
PurchasedContent.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use EloquentFilter\Filterable;
class PurchasedContent extends Model
{
use Filterable;
protected $guarded = ['id', 'created_at', 'updated_at'];
protected $dates = ['purchased_at', 'created_at', 'updated_at'];
public function modelFilter()
{
return $this->provideFilter(ModelFilters\PurchasedContentFilter::class);
}
public function contentFeature()
{
return $this->belongsTo('App\RepoModels\ContentFeature');
}
}
ContentFeature.php
<?php
namespace App\RepoModels;
use Illuminate\Database\Eloquent\Model;
class ContentFeature extends Model
{
protected $connection = 'mysql_repo';
protected $guarded = ['id', 'created_at', 'updated_at'];
protected $dates = ['created_at', 'updated_at'];
public function contents()
{
return $this->hasMany(Content::class);
}
}
Hi Eric,
Just a quick question, can Laravel Passport work with EloquentFilter and how do you go about it?
Thanks a lot for any input.
Regards,
Junel
Does this support lumen 5.4 ?
i get error
PHP error: Call to undefined function EloquentFilter\config_path() in i/vendor/tucker-eric/eloquentfilter/src/ServiceProvider.php on line 17
If I setup 2 ModelFilters that pass data using the $relations class property I it causes an infinite loop where it keeps passing data between each ModelFilter (unconfirmed). The error being returned is "PHP Fatal error: Allowed memory size of 134217728 bytes exhausted".
I can use different key names (like a_active, b_active). I could also use the other method for relationships but ideally I'd just like to pass 'active'.
For example consider these ModelFilters which would be related to 2 Models both with a relationship with one another.
class A extends ModelFilter
{
public $relations = [
'b' => ['active']
];
public function active() {
return $this->where('active', $value);
}
}
class B extends ModelFilter
{
public $relations = [
'a' => ['active']
];
public function active() {
return $this->where('active', $value);
}
}
Any ideas?
This is my filter:
public function search($search)
{
return $this->where(function($q) use ($search)
{
return $q->where('description', 'LIKE', "%$search%")
->orWhere('title', 'LIKE', "%$search%");
});
}
But this is the query that's being run:
select `listings`.*, (select count(*) from `media` where `listings`.`id` = `media`.`model_id` and `media`.`model_type` = 'App\Listing') as `media_count` from `listings` where (`description` LIKE 'App\Listing' or `title` LIKE '%a%') and `category_id` = '%a%' limit 2 offset 0
For some reason, the first instance of $search
is returning the classname of the model instead of the search term that's being passed through the query string. I'm unsure if I've just set this up incorrect or if it's a bug.
In my filter request contain array such as address[region] and address[city] ..
and my ModelFilter how handle these input and write query?
Hi Eric congratulations for your cool lib, I've had a little problem with the name of the column 'Propiedad.comuna_id' because in my table its name is 'Propiedad.comuna' , How can I resolve this issue, I've read that $drop_id=false in my model filter can be drop _id but I think that I understood bad.
if I change its name to 'propiedad.comuna_id', it works fine, but I have advanced my project and I can't change all the tables.
thanks for your help.
First off, this package is amazing, appreciate all the hardwork! Really is helping me out.
I'm trying to using filtering on top of api endpoints for specific models. For example I would call this endpoint:
/api/instructor/10/classes
That endpoint would pull only the classes associated with that instructor, but I want to be able to add filter such as:
/api/instructor/10/classes?start=2018-08-15&end=2018-08-17
My code currently for the api endpoint controller looks like this:
public function index($id)
{
$instructor = Instructor::findOrFail($id);
$classes = $instructor->classes();
return (new InstructorClassesResource($classes))->response()->setStatusCode(200);
}
But wondering how would I implement the filter on top of the findOrFail by id? Would I have to pass a parameter to the setup function?
Would appreciate guidance! Thank you
It seems that utilizing arrays does not account for the case that you may want to apply the same filter multiple times. Instead of calling the filter once with an array as the input, how can we achieve calling the filter multiple times with each input being one item in the array?
Hi there,
First, thanks for this package as it ease the filtering process nicely!
Second, I've got the following case and require assistance :
A Bill or Invoice if you prefer:
class Bill extends Model
{
use Filterable;
public function modelFilter()
{
return $this->provideFilter(BillFilter::class);
}
public function billable()
{
return $this->morphTo();
}
}
Links to a "billable" something that may have a bill, for the example let's say an order that's been place by a customer:
class Order extends Model
{
use Filterable;
public function modelFilter()
{
return $this->provideFilter(OrderFilter::class);
}
public function buyer()
{
return $this->belongsTo(Customer::class, 'buyer_id');
}
public function bill()
{
return $this->morphOne(Bill::class, 'billable');
}
}
As you can see the order reference a buyer which I would like to filter on via its name when filtering a bill list.
As the Customer filter already exists I tried with the $relations array as so in BillFilter:
public $relations = [
'billable' => [ 'customer' ],
];
and in OrderFilter I've got the following filter method:
public function customer($name)
{
return $this->whereLike('name', $name);
}
Thing is it seems that the filterRelations methods goes into an infinite loop in that case. Other test I did was create a "normal" relationship on Bill as so to try if the $relations was setup right:
public function order()
{
return $this->belongsTo(Order::class, 'billable_id');
}
Which worked as expected.
Would it be possible to filter with the polymorphic relation or not ? And am I doing it wrong ?
Hi again,
Is it possible to return just some selected fields? Like User::get(['first_name','last_name','email']);
There are some cases when I want to hide some fields when searching (like a public search) and I cannot use the protected $hidden attribute to specify those fields because in other situations I need those fields to be shown by default.
Thanks for this awesome package.
Lilian
I have a strange issue somehow scope methods are giving strange results.
In User
model there is scope
function with name active
public static function scopeActive()
{
return static::whereIsActive(1);
}
So if I do
User::active()->filter($request->all())->latest()->paginate(20);
In Filter
Class
public function q($username)
{
return $this->whereUsername($username); // No Additional check is set
}
I also get User
which are not active.
But
If I do
User::filter($request->all())->latest()->paginate(20);
In filter class
public function q($username)
{
return $this->whereIsActive(1)->whereUsername($username); // Additional check is set
}
Results are correct.
Greetings,
I'm an avid user of my own custom stubs and was wondering if perhaps it would be possible to get a config parameter that directs to a custom stub.
It's not that important though, I'll definitely manage without.
Sincerely,
Alarich
EloquentFilter use addQuery to add params.
But in Laravel 5.4 method addQuery changed from public to protected.
So, when use paginateFilter, page occur errors.
Is there a recommended way to use different comparison operators? For example, if I wanted to filter potential_volume is <, > or =. In the examples in the documentation, the comparison operator is implied in the function. Perhaps something like this:
[
'potential_volume' => '>100',
'name' => 'james%'
]
How do i make whereBetween($par1, $par2) ? in my ModelFilter
I have a situation where I am passing an array of values to filter() which includes a "sorting" parameter
but it so happens that my "sorting" parameter is not a url query parameter, instead it's part of my route
So my route looks like /submissions/latest?page=2
And I pass
[
"sorting" => $routeParams["sorting"],
"page" => $queryParams["page"],
]
The filter does its job properly, but then because I'm using paginateFilter
The url produced by the paginator is /submissions/latest?sorting=latest&page=3
How can I tell paginateFilter to not use everything passed to the filter() but only use parameters I whitelist?
When i use this controller it works
public function indexArtisan(Request $request)
{
$workers = Worker::filter($request->all())->get();
$states = DB::table('states')->pluck("name", "id");
return view ('artisans', compact('states'))->with(['workers' => $workers]);
}
but when i use this
public function indexArtisan(Request $request)
{
$work = DB::table('workers')->where('career', '=', 'artisan')->get();
$workers = Worker::filter($request->all())->get();
$states = DB::table('states')->pluck("name", "id");
return view ('artisans', compact('states','work'))->with(['workers' => $workers]);
}
it doesnt work. Any ideas on what to do?
Is there a way I can set the namespace dynamically for a modular app?
I am currently using the nwidart/laravel-modules package to separate my application. Some of my modules have a their own separate search facility so the question here is, is there a way I can the namespace for each module dynamically?
THanks
I'm passing through the following search criteria, but it's only searching by my name "Ben", the company name is being ignored. How do I use dot notation?
[
'Name' => 'Ben',
'Company.Name' => 'Nike',
]
Here's my PHP code:
// works
public function name($value)
{
return $this->where('Name', 'LIKE', "%$value%");
}
// ignored
public function companyName($value)
{
return $this->related('company', 'Name', 'LIKE', "%$value%");
}
I know this is probably outside the scope of your project but I think it would be really cool if I could get it to work.
I'm using https://github.com/jenssegers/laravel-mongodb which supports hybrid relations between mysql and mongodb models.
I am able to do this no problem User::with('profile')->all();
Where User is a mysql model and Profile is a mongodb model
Furthermore your Filterable trait works out of the box on the mongodb model which is great and I am having a lot of enjoyment using it!
so $users = User::filter($request->get()) and $profiles = Profile::filter($request->get()) both work great.
But if I try to do $users = User::filter(['gender' => 'male'])->get(); then I get errors and the errors are basically showing that it is looking for the profile fields inside mysql instead of making those queries on the mongodb collection.
I've set up my models properly
My User model uses a UserFilter which has
public function gender($value)
{
return $this->where('gender', $value);
}
And my ProfileFilter has
public function gender($value)
{
return $this->where('gender', $value);
}
And I've confirmed that the gender function above DOES get called. But when it does I get this error
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'exists ? and `user_id` <> ? and `main_picture` is not null and `gender` = ?)' at line 1 (SQL: select * from `users` where exists (select `user_id` from `profile` where `user_id` exists 1 and `user_id` <> 201 and `main_picture` is not null and `gender` = male))
Basically it's ignoring my HybridRelations setup and assuming that Profile is another mysql model.
The fact that your EloquentFilter DOES work on my mongodb model when used without a relation tells me that this can probably be made to work without too much difficulty.
Is there any chance you could add this functionality or put me in the right direction?
I have a feeling part of the answer might lie in https://github.com/jenssegers/laravel-mongodb/blob/master/src/Jenssegers/Mongodb/Eloquent/HybridRelations.php
Many thanks!
The package has whereLike
, but no orWhereLike
. It's a small feature request. ๐
I just did a test upgrade to L5.4 and your package caused a few errors. I'm not going to be working on the latest version for my current project so don't have time at the mo to fix and submit a PR but figured I'd give you a heads up!
When send request using types[]=
, the received input is:
[
0 => null,
]
Which will go into the filter methods.
This is not wanted.
I read the previous issues regarding using an OR relation - I've been able to make this work. The issue I've run into is applying the orWhere() only after the first filter. I'm including an attribute in the request to indicate whether or not the user would like all the filters to apply as OR or AND. However in order to make this work, the first filter needs to be a where() and the subsequent ones should use orWhere().
when I try to create a config file, artisan creates in the app folder, whereas the readme states:
Where
User
is the Eloquent Model you are creating the filter for. This will createapp/ModelFilters/UserFilter.php
I tried a second time to run the command to make sure (using the command in readme - php artisan model:filter User) and got:
php artisan model:filter User
/Users/robbielove/dev/xxxxxx/app/UserFilter.php Already Exists!
this is starting to really confuse me about where the file should be located, in saying this - i have tried using it in both app/UserFilter.php and app/ModelFilters/UserFilter.php and still get variations of
Class 'App\ModelFilters\UserFilter' not found
the newly generated UserFilter contains:
use EloquentFilter\ModelFilter;
class UserFilter extends ModelFilter
{
/**
* Related Models that have ModelFilters as well as the method on the ModelFilter
* As [relatedModel => [input_key1, input_key2]].
*
* @var array
*/
public $relations = [];
}
I have tried with and without adding modelFilter() to my user model. nothing I do seems to get it working, I tried with just an orderby() method in-case my code was causing the class not to be created, but still same error.
Since the update, I am not able to publish the configuration file with a new laravel installation.
I have the service provider in my app.php, but its not doing anything.
php artisan vendor:publish --provider="EloquentFilter\ServiceProvider"
Hi.
Somhow I couldn't find any info on the topic of filtering by aggregates, so here's my quesion. I have two models: Group -{has many}-> Student
. I would like to filter all groups with average student age more then Y (age is a calculated field, e.g. AVG(TIMESTAMPDIFF(YEAR, person.dob, NOW())) AS age
)
I am pretty new to Laravel in general, so sorry if this is not a question about filters exactly.
Thanks in advance for your help.
how to filter belongsToMany relation ?
TalentFilter :
public function skills($ids)
{
is_string($ids) ? $ids = explode(',', $ids) : $ids;
$this->related('skills', function($query) use ($ids) {
return $query->whereIn('skill_id', $ids);
});
}
Talent Model :
public function skills()
{
return $this->belongsToMany(Skill::class);
}
I need to filter items base on rating score. Like, pick all items that have average ratings > 4. Is it possible? I didn't find anything on the document.
Hello again,
I've got (perhaps) an issue but I'm just hoping to conclude this is the expected behaviour or something is wrong / missing in my codebase.
Consider this combination of ModelFilter example.
class ParentFilter extends ModelFilter
{
public $relations = [
'childModel' => ['active']
];
}
class ChildFilter extends ModelFilter
{
public $relations = [];
public function active($value) {
return $this->where('active', $value);
}
}
On the initial query it creates an "exist" sub-query and checks it can find atleast 1 child which is 'active'.
select * from `parent_table`
where `uuid` = ?
and exists
(select * from `children_table`
where `parent_table`.`parent_id` = `children_table`.`parent_id`
and `active` = ?
and `children_table`.`deleted_at` is null)
and `parent_table`.`deleted_at` is null
(
[0] => 3f151f53-935a-4577-af5b-ed6669524ad3
[1] => 1
[2] => 1
)
Then inevitably my code attempts to grab the children from the parent (e.g. ParentTable->childrenTable). And the code runs this query:
select * from `children_table`
where `children_table`.`parent_id` in (?)
and `children_table`.`deleted_at` is null
(
[0] => 601
)
Notice how the second query does not have an 'active' = 1 where clause.
Is this the expected behaviour or do I need to take an additional steps to ensure the ParentTable->childrenTable is properly filtered ( could this relate to the Model::with method? ).
Thank you in advance and for also promptly answering my other issue yesterday.
At the moment, no validation or normalisation runs in the filterInput
function. i.e. any key present in the input
array will call a function with that name. This means any method can be called arbitrarily. For example, using the implementation as discussed in the readme, if one defines any (public or protected) function (e.g. superSecretMethod
), then this could be called by visiting the appropriate endpoint with 'super_secret_method' as a query argument.
This is unlikely to cause a major security issue, since no actions should really be defined within a Filter, and the output of the function is never returned to the user, however I don't think arbitrary method calls are a good idea.
Some possible solutions:
get{FILTER_NAME}Filter
, ร la getFooAttribute
)EloquentFilter/src/ModelFilter.php
Lines 185 to 198 in 3a0ebf7
i have success use this lib with normal table,
so i have table, with prefix column, how to define primary column or how to change default sort column
Really, really good package, using it in a big project now and i'm loving it.
One thing I would like to notice, that you might want to add to the documentation, is the paginator.
When you render the default laravel paginator, the GET values in the URL will drop when you switch to another page, I have resolved this by rendering the paginator this way:
{!! $pages->appends(Input::except('page'))->render() !!}
This would generate URL for example:
app.com/pages?title=PageTitle&page=3
(Otherwise, the paginator would override the filter options and clear it from the url so you would loose your filter)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.